【问题标题】:If a mapping for NSManagedObject is using identificationAttributes then NSFetchedResultsController does not update如果 NSManagedObject 的映射正在使用 IdentificationAttributes,则 NSFetchedResultsController 不会更新
【发布时间】:2014-07-05 18:43:56
【问题描述】:

如果 nsmanagedobject 的映射包含 identificationAttributes 并且只是从 JSON 更新此对象的属性值,那么谁能确认我的经验表明 NSFetchedResultsController 没有执行提取?

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

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

OwnerA/OwnerBOwned 是 NSManagedObject 的子类。所有映射都使用所有类的标识属性来保持它们的唯一性。

响应附带: 业主A:

  • -->与拥有的关系(id == X)
  • -->与拥有的关系(id == Y)
  • 第二个响应是: 业主乙:

  • -->与拥有的关系(id == X)
  • -->与拥有的关系(id == Z)
  • 但是我从 Restkit 中得到了这个结构:

    响应附带: 业主A:

  • -->与拥有的关系(id == X)
  • -->与拥有的关系(id == Y)
  • 第二个响应是: 业主乙:

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

    业主A:

  • -->与拥有的关系(id == X)
  • -->与拥有的关系(id == Y)
  • 因为唯一具有此 id==X 的 Owned 实例是由 OwnerB 的关系定义的。

    所以只有一个 Owned 实例,其 id 属性为 X。但是,如果这种独特性是由每个所有者而不是全局决定的,那就更好了。

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

    感谢您的评论。

    【问题讨论】:

      标签: core-data restkit nsfetchedresultscontroller restkit-0.20


      【解决方案1】:

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

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

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

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

      【讨论】:

      • 感谢 Wain 的评论。 “(你无法指定所有者可能是什么)”反比关系呢?
      • 我认为这确实是限制障碍。是的,我了解该工具包已准备好解决一些常见问题。但是仅将这个“identificationAttributes”功能暴露给全局范围确实令人困惑。我从使用 Restkit 的第一刻起就已经对此进行了测试,但我仍然希望以某种方式调整映射,使用访问器,而不需要任何 Restkit 功夫。文档中甚至没有提到这个特性的范围是什么。restkit.org/api/0.20.0-pre2/Classes/RKEntityMapping.html使用这个特性会改变映射数据的结构,这是不好的。
      • 我的意思是你无法告诉 RestKit 对象的所有者。你会告诉它多种不同的实体类型和相关的标识属性......如果它被称为唯一标识属性会更好,因为它旨在用于全局唯一标识。
      猜你喜欢
      • 1970-01-01
      • 2012-12-10
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      相关资源
      最近更新 更多