【发布时间】:2011-08-11 19:08:27
【问题描述】:
保存托管对象上下文时,我得到一个 NSValidationErrorObject。我正在尝试保存几个对象,它们都得到相同的错误(来自用户信息):
NSDetailedErrors = (
Error Domain=NSCocoaErrorDomain
Code=1680 "The operation couldn't be completed. (Cocoa error 1680.)"
UserInfo=0x5d96fb0 {NSValidationErrorObject=<Alert: 0x5bb1fb0> (entity: Alert; id: 0x5bb0600 <x-coredata:///Alert/tBA1FD03B-5157-4523-AB34-A7C05869778F12> ;
data: {
...
identifier = "cap_024_0713_320117515151";
...}),
NSValidationErrorKey=identifier,
NSLocalizedDescription=The operation couldn\U2019t be completed. (Cocoa error 1680.),
NSValidationErrorPredicate=SELF MATCHES "",
NSValidationErrorValue=cap_024_0713_320117515151}
让我感到困惑的是,我找不到该密钥导致验证错误的原因。它是可选的,据我所知,它没有启用验证。还有其他地方可以检查要设置的验证吗?此错误消息是否报告了错误的字段?
我现在执行的其他测试:
- 每次更新后保存。没有变化。
- 新鲜的商店。没有变化。
- 未提及有关保留字的警告。
- .m 文件中没有任何手动验证。
- 如果我删除“标识符”属性,它会起作用。
- 如果我将其重新添加为“alertIdentifier”,它将不起作用,但我使用了自动迁移,所以我会在不迁移的情况下重试。
- 如果我删除“标识符属性”并重新添加它,让它看起来和以前一样,它就可以了!
【问题讨论】:
-
数据模型中是否存储了 fetch?
-
这是个好主意。模型中没有存储任何获取的属性,也没有获取请求。
-
如果你能把它切成小块,做部分模组,然后调用保存。您可能会更深入地了解它不喜欢的变化
-
提醒一下,我猜您已经尝试重命名(或删除)sql lite 商店,并再次启动应用程序以重新创建它,这是一个快速测试。寻找验证的另一个地方是在 NSManagedObject 中,但它是由程序员在 validateFor
ecc 中专门编写的。同样正如 bshirley 和 techzen 所指出的,如果我没记错的话,编译器应该指出 CoreData 的保留关键字,寻找某种警告。 -
我建议更新问题以反映您根据 cmets 和答案执行的测试。