On Aug 30, 2008, at 9:30 PM, Chris Hanson wrote:

On Aug 30, 2008, at 2:23 PM, Alex Duzik wrote:

I'm writing an app where one Core Data entity -- Folder -- has (conceptually) a to-many relationship with another object -- Item. But I want to keep those items in a particular order, so I have a third entity, OrderedItem, which keeps a reference to the folder along with a reference to the item and also adds an order attribute to track the item's position in the folder.

This is rather cumbersome to maintain, so I've implemented the key- value coding methods for a to-many relationship:

- (NSUInteger) countOfItems
- (Item *)objectInItemsAtIndex:(NSUInteger)index;
- (void)insertObject:(Item *)item inObjectsAtIndex:(NSUInteger)index;
- (void)removeObjectFromItemsAtIndex:(NSUInteger)index;

This works really well just about everywhere. However, in my window controller's delete: method, calling mutableArrayValueForKey:@"items" gives me this exception:

2008-08-30 16:11:27.718 MyApp[6436:813] *** - [NSKeyValueFastMutableArray2 count]: value for key items of object 0x2a7dc0 is nil

Don't Do That. I suspect you have a relationship named "items" on your Folder entity, but you're trying to implement a mutable array property named "items" on the class used by your Folder entity. The two will conflict with each other, leading to unpredictable results.

Keep the names distinct and you shouldn't have any such issue. For example, I might name things like this:

   Folder.items -- mutable-array property on Folder class
Folder.unorderedItems -- to-many relationship on Folder entity to Item Folder.orderedItems -- to-many relatiopnship on Folder entity to OrderedItem

In my code, I'd probably use the Folder.items property most of the time (for example, for bindings, or for otherwise manipulating the set of items in a Folder) and just have its accessor methods do the appropriate work to keep its Folder.unorderedItems and Folder.orderedItems relationships in sync.

 -- Chris


Okey dokey, I finally got it working thanks to you. A long way back, I did have an "items" relationship. I removed it, but at some point, in a fit of I-don't-know-what, decided to add a field called "items" again as an undefined, transient property. Why, I cannot tell you, but I hadn't thought to look at the object model until you mentioned it. Thanks so much!

Alex
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to