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 (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 arch...@mail-archive.com

Reply via email to