WebObjects/Overview/Key Value Coding

The contents of this wikibook are out of date and have now moved to http://wiki.objectstyle.org/confluence/display/WO/Home.

If you familiar with OGNL then key value coding is a bit like that. We'll call key value coding KVC in the context of this page to abbreviate. KVC also exists in the Cocoa infrastructure shipped with MacOS-X as well as the OPENSTEP infrastructure. In this page we will focus on KVC in the context of WebObjects and java.

Conceptual Aspects
Consider the following model segment;



This model shows a number of entities and the lines between the entities show relationships. For example, the Organisation entity has a to-one relationship with a Worker called "workerAccount" and it also has a "to-many" relationship to "OrgRegion" called "orgRegions".

The term "instance" here is referring to a specific organisation. For example, "The Corn Flour Company" and "Aqua Breweries" might be instances of the Organisation entity.

Value For Key
An instance of an Organisation can supply values for the keys "address", "countryIso", "email" etc... and they will return a value for the key. It is essentially acting like an NSDictionary or a Map object. This is how data is extracted from an object.

Take Value For Key
This is where an instance of an entity is asked to "take up" some value for a key. For example, an instance of an organisation might be told to take the value "foo@foo.co.nz" for the key "email". This is how data is loaded into an object using KVC.

Value For Key Path
Using a dotted path, it is possible to traverse relationships to access data in other entities. For example, if you have an instance of "OrgExpertise", it is possible to get the value for the key path "organisation.workerAccount.name". This is how you can extract data from the interconnected network of object instances.

Take Value For Key Path
Using a dotted path, it is possible to get an object in the interconnected network of object instances to "take up" some piece of data. For example, if you have an instance of "OrgExpertise" then it is possible to get the object to "take up" a value of "Joe Smith" for the key path "organisation.workerAccount.name".