【问题标题】:Why does my NSFetchedResultsController delegate stop firing when I add an NSPredicate?当我添加 NSPredicate 时,为什么我的 NSFetchedResultsController 委托停止触发?
【发布时间】:2012-03-17 14:19:03
【问题描述】:

我有一个NSFetchedResultsController 在表格视图中显示“地点”,但是当我更新应该在另一个视图控制器中显示的地点集时,我的 FRC 不会更新表格视图。

这是普遍的问题。我的具体案例似乎围绕支持我的 FRC 的 NSPredicate 展开,因为当我删除 NSPredicate(并且只获得 所有 个位置)时,一切正常。

我的查询是

@"ANY photos.isFavorite == %@", [NSNumber numberWithBool:YES]

placesphotos 有一对多的关系(我正在研究 CS193P)。也许我的 FRC 没有设置为观察相关表或其他东西的变化?

关于我的情况的一些附加信息:

【问题讨论】:

    标签: ios ios5 nspredicate nsfetchedresultscontroller


    【解决方案1】:

    我不知道是不是你的情况,但我还是会发布。也许这可能是一个有效的解决方法。

    NSFetchedResultsController pitfall

    希望对你有帮助。

    【讨论】:

    • 是的,就是这样。作为记录,FRC 不会获取实体上的更改,而不是它打算获取的类型。解决方法是手动“弄脏”相关实体(在我的情况下是相关的place),以便 FRC 看到更改。非常感谢!
    【解决方案2】:
    • 您是否尝试过测试更简单的谓词,例如使用照片一对一关系而不是照片?

    • “我的 FRC 没有更新表格视图” - 您使用的是 -controllerDidChangeContent: 吗?您是否确认它没有被调用?我已经看到,与文档相反,从该方法中调用 tableView 上的 reloadData 是不安全的,因为该方法可能在辅助线程而不是主线程上调用。

    • 您是否在同一个(主?)线程上执行与 MOC 相关的所有操作?

    【讨论】:

    • 一个更简单的谓词确实有效。当我完全省略谓词或使用严格处理 places 的谓词(而不是提示连接到 photos)时,表格视图会按预期更新。 (回答你的另外两个问题:是的。)
    【解决方案3】:

    试试这个谓词?

    @"%@ IN photos.isFavorite", [NSNumber numberWithBool:YES]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多