如果NSManagedObject的映射使用identifyAttributes,则NSFetchedResultsController不会更新

时间:2014-07-05 18:43:56

标签: core-data restkit nsfetchedresultscontroller restkit-0.20

如果nsmanagedobject的映射包含 identificationAttributes 并且只是从JSON更新了该对象的属性值,那么任何人都可以确认我的经验,这表明NSFetchedResultsController没有执行提取吗?

我对Restkit的另一个问题是这个“identificationAttributes”功能的行为。如果Restkit要将json数据映射到这样一个(唯一的)核心数据对象,那么它会查看是否已存在此nsmanagedobject的现有实例。但似乎这个实例正在被全局搜索,也就是说,商店中只有一个具有此特定标识属性的特定nsmanagedobject实例。我希望每个商店都有一个单独的实例,但每个所有者 (与此nsmanagedobject的父拥有关系)。

所以我希望这个结构(id是标识属性值):

OwnerA / OwnerB Owned 是NSManagedObject的子类。所有映射都使用identifyAttributes来保证所有类的唯一性。

回应来自: OwnerA:

  • - > relatioship to Owned(id == X)
  • - >与所拥有的关系(id == Y)
  • 第二反应来自: OwnerB:

  • - > relatioship to Owned(id == X)
  • - >与所拥有的关系(id == Z)
  • 但我从Restkit获得了这个结构:

    回应来自: OwnerA:

  • - > relatioship to Owned(id == X)
  • - >与所拥有的关系(id == Y)
  • 第二反应来自: OwnerB:

  • - >与所拥有的关系(id == X
  • - >与所拥有的关系(id == Z)
  • 所有者失去与Owned的关系(id == X)

    OwnerA:

  • - >与所拥有的关系(id == X)
  • - >与所拥有的关系(id == Y)
  • 作为拥有此id == X的唯一单个实例由OwnerB的关系定义。

    因此,只有一个具有id属性 X 的Owned实例。但如果这种独特性是针对每个所有者而非全球所决定的,那将会更好。

    如果谓词使用带有Owned.attributeValue ==的语句,则NSFetchedResultsController事件不会注册使用id属性 X 的Owned更新... NSPredicate对于检测关系中的更改是无用的。我知道,但如果这样的对象使用 identificationAttributes ,它也不会检测nsmanagedobjects中的更改。

    感谢您的评论。

    1 个答案:

    答案 0 :(得分:0)

    是的,标识对于上下文(因此数据存储)是全局的,而不是对于所有者' (关系)基础(你无法指定所有者可能是什么)。

    如果您想与某个所有者管理事物,您可以在JSON中使用嵌套来定义唯一所有者及其拥有的关系内容。

    另请注意,您可以拥有多个标识属性(但是同一实体的每个映射上的标识属性列表必须相同或者会发生奇怪的事情)。因此,您可以通过将所有者标识复制到其他对象并在标识列表中使用该属性来模拟所有权标识。您需要将身份复制到另一个对象,您无法通过关系引用它。

    识别属性与FRC及其观察的内容完全无关。我并不是100%清楚你所看到的内容,但它必须与/和/或关系内容或你不期望的新对象的创建有关。