我有一个 Core Data iPhone 应用程序,它显示 Subscription 实体,其中任何 items 都不是 read 。换句话说,我构造了一个这样的谓词:

[NSPredicate predicateWithFormat:@"ANY items.read == NO"]

虽然这适用于初始提取,但当我修改 Subscription 时它不会影响 Item 实体,因此 NSFetchedResultsController 永远不会重新评估 Subscription 实体。有什么更好的方法来构造它,以便在设置项目的 Subscription 属性时更新 read 实体?

我确实尝试在 unreadCount 上创建属性 Subscription 并使用 keyPathsForValuesAffectingUnreadCount 返回包含 items.read 的集合。我没想到这会奏效,但事实并非如此。我从 _NSFaultingMutableSet 收到一个异常,告诉我不支持 read 键。

最佳答案

我看到两种解决方案:

  • 当你修改一个项目时,让获取的结果 Controller 再次执行获取并重新加载表 View 。
  • 向订阅添加一个属性(例如您的 unreadCount 或 bool 值 h​​asUnreadItems)并保持其正确更新。在获取的结果 Controller 中使用此属性。

  • 您可以获得名为“aSubscription”的订阅的未读项目集,如下所示:
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"read == NO"];
    NSSet *unreadItems = [aSubscription.items filteredSetUsingPredicate:pred];
    

    关于iphone - 带有基于依赖属性的谓词的 NSFetchedResultsController,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2185679/

    10-12 02:21