Re: Core Data doesn't save toMany relations please HELP :S
Re: Core Data doesn't save toMany relations please HELP :S
- Subject: Re: Core Data doesn't save toMany relations please HELP :S
- From: Gustavo Pizano <email@hidden>
- Date: Tue, 30 Mar 2010 08:46:53 +0200
Ben Hello.
thanks for the reply,
There is something wrong, yes, .
On Mar 30, 2010, at 12:01 AM, Ben Trumbull wrote:
>> So was digging more into the problem, and realize that the Items are being saved the ItemXInvoice are being saved and related to the invoice, but I can't acces the invoice detail (ItemXInvoice) immediately I get a console error:
>
> The array controller doesn't appreciate what you're doing to it. Is there a reason you haven't just configured it in Entity mode with an Entity name and a Managed Object Context binding ? Then the array controller will just listen to the NSManagedObjectContext notifications and do most of this for you.
>
The arrray controller its configured with a Entity ItemXInvoice, and the Application delegate's MOC,
>> Cannot remove an observer <NSTableBinder 0x116087000> for the key path "toItem.descr" from <ItemXInvoice 0x116024800>, most likely because the value for the key "toItem" has changed without an appropriate KVO notification being sent. Check the KVO-compliance of the ItemXInvoice class.
>
> Somewhere you've changed the toItem property without going through the setter method properly.
>
>> I then checked the class and in the setItem Im doing:
>>
>> -(void)setToItem:(Item *)value{
>> [self willChangeValueForKey:@"toItem"];
>> [value retain];
>> [self setPrimitiveValue:value forKey:@"toItem"];
>> [self didChangeValueForKey:@"toItem"];
>> }
As today I deleted these method. I dunno why I put it, I was trying to show my colleague something, but then I wrote it here just in case.
>
> Where'd you get this ? It's not from any of the Xcode templates, and it's wrong (leaks). There is no need to retain value, and since this setter doesn't do anything interesting, you should just delete it and use the @dynamic property from the Xcode Design menu -> Data Modeling -> Copy Objective-C 2.0 Method Declarations to Clipboard
>
>> -(IBAction)addItemXInvoice:(id)sender{
>>
>> Item * newItem = [NSEntityDescription insertNewObjectForEntityForName:@"Item" inManagedObjectContext:[self managedObjectContext]];
>> ItemXInvoice * newItemXInvoice = [NSEntityDescription insertNewObjectForEntityForName:@"ItemXInvoice" inManagedObjectContext: [self managedObjectContext]];
>> [newItemXInvoice willChangeValueForKey:@"toItem"];
>> [newItemXInvoice setValue:newItem forKey:@"toItem"];
>> [newItemXInvoice didChangeValueForKey:@"toItem"];
>> [_itemsArrayController addObject:newItemXInvoice];
>> if(_newInvoice == nil){
>> _newInvoice = [NSEntityDescription insertNewObjectForEntityForName:@"Invoice" inManagedObjectContext:[self managedObjectContext]];
>> }
>> [_newInvoice addToItemsXInvoiceObject:newItemXInvoice];
>> [_tempItemsArray addObject:newItem]; //I need to keep track of the newly created itmes by this method so I can safelty remove them.
>> //Set the creationItemPrice for each ItemXInvoice
>>
>>
>> }
>
> uhm. lots of not healthy things here. You shouldn't be calling -willChange/-didChange explicitly here. That's the purpose of the setter methods (or KVC). Not sure why a bunch of this code isn't in -awakeFromInsert. Or why you have _tempItemsArray at all.
>
the _tempItemArray, I have it because Im able to add new item with the + button, which call the above method, and from a pop up button which has the previously created items, so when removing I will delete only the items that exist in that array, which means were created using the + button and not the pop up button, so the MO that are boud to the pop up button will not disappear also,..... that was my thought ...
> As others have noted, Cocoa Bindings isn't your Model layer and trying to use it that way is both tedious and error prone. It's the Controller layer that intermediates between your Model objects and the UI. You really want to focus these kinds object graph (data management) operations on the Core Data objects, and leverage those APIs along with KVO and NSNotification.
>
> - Ben
>
>
>
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden