【问题标题】:CoreData Save ErrorCoreData 保存错误
【发布时间】: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 和答案执行的测试。

标签: ios core-data


【解决方案1】:

属性名称identifier 可能有问题 - 尝试myIdentifier 看看它是否有效

(由于 Obj-C 中的含义,我在调用 description 时遇到了问题)

已编辑以反映 cmets 和结果:

一起删除属性,测试是否出现另一个故障,如果没有错误,则将其添加回来。

删除“标识符”属性并在 Xcode 中再次添加它解决了这个问题。这可能是由 Xcode Core Data 建模器错误引起的。

【讨论】:

  • 不幸的是它没有用。将其重命名以进行测试并使用新商店会带来完全相同的问题。它决心做某种验证,我不知道为什么!
  • 您可以实现一些验证方法,也许这样做并通过调试器进行跟踪可能会提供一些见解? (疯狂猜测)
  • SELF MATCHES "" 部分让您怀疑它不是可选的,nil,将属性全部删除,测试是否出现另一个故障,如果没有错误则将其添加回来
【解决方案2】:

我猜这是使用“标识符”作为属性名称引起的命名冲突。这类似于人们使用“描述”作为属性名称时出现的错误。

要进行测试,请将其更改为其他内容,看看它是否有效。

【讨论】:

  • 我似乎一直在引导@TechZen
  • 我要试试这个。好主意。
  • 不幸的是它没有用。将其重命名以进行测试并使用新商店会带来完全相同的问题。它决心做某种验证,我不知道为什么!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
  • 2018-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多