Hello all again,
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:
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.
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"];
}
when I quit the application and reopened I can see the detial without problem,
but when I create an Invoice and try to check it right after I can not. These
are the methods Im usign when creating ItemXDetail and saving the invoice
Invoice:
-(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
}
the above creates a new Item, and a nte ItemXInvoice and relate them togheter
then checks if _newinvoice instance is nil, if so then creates one, and relate
the itemXInvoice to it.
-(IBAction)setPredefinedItem:(id)sender{
ItemXInvoice * newItemXInvoice = [NSEntityDescription
insertNewObjectForEntityForName:@"ItemXInvoice" inManagedObjectContext: [self
managedObjectContext]];
NSMenuItem * menuItem = [_predefinedItems selectedItem];
NSInteger indexOfItem = [_predefinedItems indexOfItem:menuItem];
[newItemXInvoice setValue:[[_prefetchedItems arrangedObjects]
objectAtIndex:indexOfItem] forKey:@"toItem"];
if(_newInvoice == nil){
_newInvoice = [NSEntityDescription
insertNewObjectForEntityForName:@"Invoice" inManagedObjectContext:[self
managedObjectContext]];
}
[_itemsArrayController addObject:newItemXInvoice];
}
Here I get a precreated Item, that I select form a poop up, then I create a
ItemXInvoice and relate them together, and then I relate it to the _newInvoce
instance.
Then when I click the save button":
if(_newInvoice != nil){
[(User *)[[[parent _userListArrayController] selectedObjects]
objectAtIndex:0] addToInvoicesObject:_newInvoice]; //Setting the Relationship
Witht the User.
[(Client *)[[_clientsArrayController selectedObjects] lastObject]
addToInvoicesObject:_newInvoice]; //Settting the RelationShip To the
Customer.
for(ItemXInvoice * acutalItem in [_itemsArrayController
arrangedObjects]){//Set the creationItemPrice for each ItemXInvoice
[acutalItem setValue:[acutalItem
valueForKeyPath:@"toItem.unitPrice"] forKey:@"creationItemPrice"];
[acutalItem setValue:[self getNewStatusEntity]
forKey:@"toStatus"];
}
//I relate the selected user to the invoice (by this time the _newInvoice
instnace shall not be null)
// then I iterate through all the elements in the ItemXInvoice Array
Controller, and set the unit Item Price and the toStatus, the following lines
set up the attributes of the invoice, and then I jsut save, call the method:
if([managedObjectContext save:&error] == NO) {
and present an alert.
Now in the NSTable where Im putting the ItemXInvoice values, the first column,
is toItem.descr , (Item has attributes of descr and unitPrice). the second
column is quantity which is attribute of ItemXInvoice, and the third one is
unit price with bound to toItem.unitPrice, So I dunno if its because of this
way Im managing the table that its being boydn to a NSArrayController of
ItemXInvoice, and when I push the add button, I do what
-(IBAction)addItemXInvoice:(id)sender{ shows, and then somehow the item its not
being related whith the ItemxIvnoice or its not notifying of the change.
Im kinda lost already..
any help some where?
thanks
Gustavo
_______________________________________________
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]