【发布时间】:2011-12-13 07:33:02
【问题描述】:
目前我所有的保存都进入内存,但没有写入磁盘 (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.)}
【问题讨论】:
-
我之前看到过,我知道这个错误是由于未设置必填字段,但我的问题是为什么它从设置变为不设置之后?
-
该错误消息是针对与您正在记录的实体 (
0x6e89010) 不同的实体 (0x81a0ab0),并且似乎一个包含另一个。 Core Data 是否支持级联?如果是这样,则意味着您实际上是一次调用保存了两个对象,并且容器对象的属性为零。 -
后人,知道您的自定义托管对象子类中的杂散合成也可以对您执行此操作。
标签: objective-c ios xcode core-data