示例:我有一个具有catAge属性的Cat实体。在数据建模,我配置catAge为INT与100一个最大那么我这样做:托管对象上下文无法保存时该怎么办?
[newManagedObject setValue:[NSNumber numberWithInt:125] forKey:@"catAge"];
// Save the context.
NSError *error = nil;
if (![context save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
我得到一个错误在控制台,像这样:
2010-06-12 11:40:41.947 CatTest[2250:207] Unresolved error Error Domain=NSCocoaErrorDomain Code=1610 UserInfo=0x10164d0 "Operation could not be completed. (Cocoa error 1610.)", {
NSLocalizedDescription = "Operation could not be completed. (Cocoa error 1610.)";
NSValidationErrorKey = catAge;
NSValidationErrorObject = <NSManagedObject: 0x10099f0> (entity: Cat; id: 0x1006a90 <x-coredata:///Cat/t3BCBC34B-8405-4F16-B591-BE804B6811562> ; data: {
catAge = 125;
catName = "No Name";
});
NSValidationErrorPredicate = SELF <= 100;
NSValidationErrorValue = 125;
}
好,所以我有一个验证错误。但奇怪的是,在这之后似乎MOC被打破了。如果我只需轻点“Add”添加另一个无效猫对象和保存,我得到这样的:
2010-06-12 11:45:13.857 CatTest[2250:207] Unresolved error Error Domain=NSCocoaErrorDomain Code=1560 UserInfo=0x1232170 "Operation could not be completed. (Cocoa error 1560.)", {
NSDetailedErrors = (
Error Domain=NSCocoaErrorDomain Code=1610 UserInfo=0x1215f00 "Operation could not be completed. (Cocoa error 1610.)",
Error Domain=NSCocoaErrorDomain Code=1610 UserInfo=0x1209fc0 "Operation could not be completed. (Cocoa error 1610.)"
);
}
这似乎是现在的报告两个错误。但是:当我尝试从表格视图中删除一个有效的现有对象(使用基于导航的应用程序中的默认核心数据模板)时,应用程序崩溃!我得到的所有控制台是:
2010-06-12 11:47:18.931 CatTest[2250:207] Unresolved error Error Domain=NSCocoaErrorDomain Code=1560 UserInfo=0x123eb30 "Operation could not be completed. (Cocoa error 1560.)", {
NSDetailedErrors = (
Error Domain=NSCocoaErrorDomain Code=1610 UserInfo=0x1217010 "Operation could not be completed. (Cocoa error 1610.)",
Error Domain=NSCocoaErrorDomain Code=1610 UserInfo=0x123ea80 "Operation could not be completed. (Cocoa error 1610.)"
);
}
...所以不知道它在哪里或为什么崩溃,但它确实如此。所以问题是,当出现验证错误时,需要采取什么措施?
+1你一直在问关于核心数据的一系列深思熟虑的问题。未来的SO读者会发现这些非常有用。 – TechZen 2010-06-12 17:01:46
我的大目标是要求在SO上提出10.000个问题。只是因为我很好奇;)我放弃了我的日常工作,以便能够这样做(不是开玩笑)。 – dontWatchMyProfile 2010-06-13 07:46:02