【问题标题】:keypath objectID not found in entity exception在实体异常中找不到 keypath objectID
【发布时间】:2014-06-07 12:49:34
【问题描述】:

我在尝试获取对象 ID 之后的某些对象时遇到了这个奇怪的问题。该错误抱怨没有 objectID 键路径之类的东西,但托管对象应该对此做出响应。该错误并非一直抛出,这让我认为这可能是一个并发问题,尽管我已经仔细检查过并且每个上下文都在自己的线程上执行操作。

这里是谓词,虽然它在我看来是理智的: [NSPredicate predicateWithFormat:@"objectID == %@", book.objectID]

编辑:关于this 的回答。我没有尝试使用对象本身,出于多线程的考虑,我需要使用 objectID。

【问题讨论】:

  • 给出的答案仍然适用于这种情况。虽然很奇怪,但 CoreData 允许在谓词中将对象与它们的 objectID 进行比较,因为无论如何这是它们的识别方式。
  • @DanShelly 不确定您所说的“仍然持有”是什么意思,在线程之间共享托管对象似乎不是一个好主意
  • 我没有说你应该在线程之间共享托管对象。我的意思是您仍然可以使用链接答案中给出的谓词,但将您的对象 ID 作为参数提供:@"SELF = %@",book.objectID
  • @DanShelly 很奇怪,这行得通。谢谢!知道为什么吗?如果您将评论作为答案,我会接受。

标签: ios iphone ipad cocoa core-data


【解决方案1】:

THIS 链接中给出的答案在这里仍然有效。
它在您使用相同谓词的意义上成立:

NSPredicate* p = [NSPredicate predicateWithFormat:@"SELF = %@",book.objectID];

但您提供 objectID 作为参数。

CoreData 允许在从存储中获取时比较 objectIDs 和对象。这可能与 objectID 用于与托管对象的一对一映射有关(因此使用 SELF 是谓词保留字而不是属性名称)。

【讨论】:

  • Core Data 晦涩行为的另一个例子。我想知道这甚至在任何地方都有记录吗?在找到您的评论之前,我一直在努力解决这个错误。
猜你喜欢
  • 2015-04-10
  • 1970-01-01
  • 1970-01-01
  • 2013-04-26
  • 2011-01-30
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多