代码之家  ›  专栏  ›  技术社区  ›  Mike Buss

在第二个视图控制器中删除nsfetchedresultscontrollerdelegate(不触发?)

  •  0
  • Mike Buss  · 技术社区  · 16 年前

    我遇到了一个类似于这里描述的问题: NSFetchedResultsControllerDelegate not firing (未在第二个视图控制器上调用我的nsfetchedResultsControllerDelegate的代理)

    我似乎无法找到有效的解决方案。我有一个从核心数据加载信息的主视图,很好,但是当它推动一个单独的控制器(并将托管对象传递给它)时,委托方法不会触发。我读过“MergeChangesFromContextDidSaveNotification”,但我不理解如何同步这两个管理对象和/或获取要调用的委托方法。

    任何帮助都将不胜感激。谢谢您, 迈克

    1 回复  |  直到 16 年前
        1
  •  1
  •   TechZen    16 年前

    请注意,我确实理解您的问题,但只有当控制器监视的核心数据对象图的某个部分发生更改时,nsfetchedResultsController才会调用它的委托。简单地在两个视图控制器之间传递托管对象不会改变核心数据图本身,因此不会激发委托方法。

    要解雇该代表,您必须更改 数据 获取结果控制器监视的。这意味着更改FetchedResults控制器获取的实体之一。您要么必须添加或删除实体的实例,要么必须更改现有实体的属性或关系。

    …但我不明白该怎么做 同步两个管理对象 和/或使委托方法 打电话。

    根据您的描述,您没有两个托管对象,但只有一个对象从第一个视图控制器传递到下一个视图控制器。也许您指的是托管对象上下文?

    mergeChangesFromContextDidSaveNotification:
    

    …是nsmanagedObjectContext的一种方法,仅在需要组合来自两个独立上下文的数据时使用。这是一个高级操作,仅当您试图集成两个独立上下文的数据时才使用。例如,将数据库更新为新版本时。