I’m trying to implement a getter on one of my db classes. But when I execute the following line of code, where “obj” is an NSManagedObject:
return [obj valueForKey:@"activationData"];
I get the following NSUnknownKeyException:
‘[ valueForUndefinedKey:]: the entity Blueprint is not key value coding-compliant for the key “activationData”.’
I just recently added a String attribute named “activationData” to my “Blueprint” entity using Xcode. But when I run the app the NSManagedObject that represents Blueprint entities does not include the new “activationData” attribute, which apparently is the cause of the crash.
The NSManagedObject looks like this, but I expected it to show the new Attribute along with the createDate, name and order attributes:
<NSManagedObject: 0x5138c90> (entity: Blueprint; id: 0x513a2e0 <x-coredata://8C586BB8-B9E7-4FD7-84CB-5CE66FB221E6/Blueprint/p2> ; data: {
createDate = "2012-02-21 15:49:00 +0000";
name = "Feb 17 test";
order = 2;
})
Fyi, user1226119’s answer (below) reminded me that I used the Organizer to extract the sqlite db from my device and inspect it with SQLite Manager to verify things. Sure enough there is still no new activationData field in the Blueprint table. The table looks the same as it always did.
I think I must have missed some necessary step for adding a new Attribute to an existing db Entity.
The solution was to update the pathForResource method call in the code that returns the NSManagedObjectModel. I had indeed created a new xcdatamodel version of the db before adding the attribute, but apparently you are supposed to refer to it using the following code, which retrieves the model your app will use.
I had to put the new database version’s name (“MyDB Version5”) as the pathForResource parameter. Previously it was “MyDB Version5”.