Currently all of my saves are going to memory but are not being written out to disk (iOS). My app is set up with a UITableView
with an Add Modal View presented over this to create content, when the user is done creating the content and the save button is clicked the new Item (NSManagedObject class created by my CoreData Model) I print it out and it is fully filled in. Immediately after this I try to save it to disk and an error message is produced with the same object ID except the fields are nil. In between however my UITableViews - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
method is getting called which is logging @"CanEdit"
.
Can anyone see what I am doing wrong?
Here is the code
NSLog(@"newItem %@", newItem);
NSError *error;
if (![newItem.managedObjectContext save:&error]) {
// Handle the error.
NSLog(@"%@", error);
}
if (editItem) {
[self.navigationController popViewControllerAnimated:YES];
} else {
[self dismissModalViewControllerAnimated:YES];
}
And Here is my error
2011-10-22 15:24:46.322 App[42115:fb03] newItem <Item: 0x81a4a30> (entity: Item; id: 0x81a0ab0 <x-coredata:///Item/t7F2B54D2-0DCC-4530-88D5-900BE25C7DC23> ; data: {
containedIn = "0x6e89010 <x-coredata:///Item/t7F2B54D2-0DCC-4530-88D5-900BE25C7DC22>";
contains = (
);
content = a;
dateLastUsed = nil;
depth = 0;
encrypted = 0;
favorite = 0;
favoritePosition = nil;
folder = 0;
fullPath = "^Templates^Add Title";
name = a;
sortPosition = 0;
})
2011-10-22 15:24:46.323 App[42115:fb03] CanEdit
2011-10-22 15:24:46.326 App[42115:fb03] Error Domain=NSCocoaErrorDomain Code=1570 "The operation couldn’t be completed. (Cocoa error 1570.)" UserInfo=0x6ecc490
{NSValidationErrorObject=<Item: 0x6e88fb0> (entity: Item; id: 0x6e89010 <x-coredata:///Item/t7F2B54D2-0DCC-4530-88D5-900BE25C7DC22> ; data: {
containedIn = nil;
contains = (
"0x81a0ab0 <x-coredata:///Item/t7F2B54D2-0DCC-4530-88D5-900BE25C7DC23>"
);
content = nil;
dateLastUsed = nil;
depth = 0;
encrypted = 0;
favorite = 0;
favoritePosition = nil;
folder = 1;
fullPath = "^Templates^";
name = Templates;
sortPosition = 0;
}), NSValidationErrorKey=content, NSLocalizedDescription=The operation couldn’t be completed. (Cocoa error 1570.)}
The problem is that you have a MO in your context which has required fields set to nil. Specifically this is saying NSValidationErrorKey=content
which in the preceding NSValidationErrorObject
is printing out as nil.
Either you have a logic error where you values are not getting set in the MO correctly, or you should change your model to make that field optional.
From your error output above, you can see that there are two different objects, one with the address 0x6e89010
containing your data, another with the address 0x6e88fb0
where required fields are nil
.
The source of this error must be contained in code that you did not post.
My recommendation in order to avoid these kind of problems is to follow the following design pattern which is also used in Apple's demos:
[NSEntityDescription insertNewObjectForEntityForName:entityName inManagedObjectContext:self.managedObjectContext];
[self.managedObjectContext save:&error];
[self.managedObjectContext deleteObject:insertedObject];
This is very efficient and tends to avoid stray object errors.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With