目前我的所有保存都将转到内存但未写入磁盘(iOS)。我的应用程序设置为UITableView
,并在此处显示添加模式视图以创建内容,当用户完成创建内容并单击保存按钮时,新项目(由我的CoreData模型创建的NSManagedObject类)我将其打印出来并完全填满。在此之后,我立即尝试将其保存到磁盘,并生成一个错误消息,其中包含相同的对象ID,但字段为nil。然而,在我的UITableViews之间 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
正在调用的方法是记录@"CanEdit"
。
谁能看到我做错了什么?
这是代码
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];
}
这是我的错误
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.)}
答案 0 :(得分:24)
答案 1 :(得分:1)
从上面的错误输出中,您可以看到有两个不同的对象,一个包含地址0x6e89010
包含您的数据,另一个包含地址0x6e88fb0
,其中必填字段为nil
。
此错误的来源必须包含在您未发布的代码中。
为避免出现这类问题,我的建议是遵循Apple的演示中使用的以下设计模式:
[NSEntityDescription insertNewObjectForEntityForName:entityName inManagedObjectContext:self.managedObjectContext];
[self.managedObjectContext save:&error];
[self.managedObjectContext deleteObject:insertedObject];
这非常有效,并且可以避免杂散对象错误。