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 protected])
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]