A xib file in my OS X project contains a table view backed by an NSArrayController which is set to Entity Name (aka Core Data) mode. When I send an -add: message to this array controller, an exception is raised as the console emits:
NSManagedObjects of entity 'Foo' do not support -mutableArrayValueForKey: for the property 'bars'.
Correct! Instead, NSManagedObjects support -mutableSetValueForKey:, and I'd always thought that NSArrayController knew this and behaved accordingly – being in Entity Name mode, I expect it to send -mutableSetValueForKey: to my Foo object, not -mutableArrayValueForKey:. From the documentation:
Typically the collection is an array, however, if the controller manages a relationship of a managed object (see NSManagedObject) the collection may be a set.
If I "fake it" by adding the following method to my Foo class, it prevents the exception from being raised but, of course, this doesn't really work:
- (NSMutableArray*)mutableArrayValueForKey:(NSString*)key {
[self willAccessValueForKey:key];
NSMutableArray* result = [[[self valueForKey:key] allObjects] mutableCopy] ;
[self didAccessValueForKey:key];
return result;
}
What might be wrong here? I've checked the "mode" of that array controller five times.