尽管匹配x-coredata id,“CoreData不支持持久的跨店关系”

时间:2012-12-01 22:58:42

标签: ios sqlite core-data

在iOS 6.0.1上将Core Data托管对象上下文保存到SQLite存储时,我遇到了一个奇怪的“CoreData不支持持久的跨店关系”异常。它涉及模型中Quotes和AbstractSources之间的一对一关系。在运行时它涉及一个Quote和一本书(其中Book继承自AbstractSource。一切都在模型编辑器中运行良好。)

我研究了类似的报道,并报道了报道的原因:

  1. 我将Quote和Book分配给同一个持久性 使用assignObject:toPersistentStore:存储,所以两者都不存在 未分配的。
  2. 错误描述显示所有“绝对”x-coredata id开始 使用相同的前缀(例如 “x-coredata:// 82B3BEB3-60F2-4912-AC80-11AAD29CFF99 /”,所以有 实际上似乎只是一个商店才使用。
  3. 我的问题是这些:

    1. 还有什么我需要检查的(也许sg。与...有关 AbstractSource,我在源代码中没有触摸/控制?我是 通过调用来创建Quote和Book initWithEntity:insertIntoManagedObjectContext each。)
    2. 我注意到错误描述还包括几个 “相对的”x-coredata id(形式为“x-coredata:/// ......”)。可以 绝对形式总是被认为是 “跨数据库”,即使“绝对”前缀(见上面的例子)是相同的? 如果是这样,我怎么能影响“绝对”和“绝对”之间的任何选择 “亲戚”x-coredata ids?
    3. Thx(很多)引起你的注意!

1 个答案:

答案 0 :(得分:0)

所以这就是(大概)造成麻烦的原因:

  1. 我的托管对象上下文的协调员必须管理两个持久性 商店。现在,我指定报价和书籍的那个是我 希望他们保存在启动时重置。有一个错误 在此代码中,这使该商店无法使用。自从第二个 它可以随心所欲地接管,在这种情况下导致不必要的结果。 经验教训:我现在断言在设置核心数据堆栈之后确实存在两个存储。
  2. 在我的Core Data模型的早期开发期间,我重命名了一些 它在模型编辑器中的实体。我错误地改变了 名称,但不是实体类属性。所以有效的同时 一切都在模型编辑器中运行良好,然后出乎意料 类在运行时使用,因此意外的类在哪里 分配给意外/错误的商店。经验教训:我现在确定了 实体名称及其类属性保持完美同步(其他 情况允许)。
  3. 此问题现已解决,我也重构了我的代码/模型以使用(非重叠)configurations而非显式分配,这也有助于展望。

    再一次,请注意