NSFetchedResultsController 不使用谓词 @count 调用委托

Posted

技术标签:

【中文标题】NSFetchedResultsController 不使用谓词 @count 调用委托【英文标题】:NSFetchedResultsController not calling delegate with predicate @count 【发布时间】:2015-12-13 15:12:38 【问题描述】:

我有一个获取的结果控制器,当它有一个谓词时它没有调用它的委托。谓词仅包含具有events 的对话对象:

    let predicate = NSPredicate(format: "events.@count > 0")

    let fetchRequest = Conversation.MR_requestAllSortedBy(
        "mostRecentMessage.eventDate",
        ascending: false,
        withPredicate: predicate)
    self.fetchedResultsController = NSFetchedResultsController(
        fetchRequest: fetchRequest,
        managedObjectContext: MagicalRecordStack.defaultStack()!.context,
        sectionNameKeyPath: nil,
        cacheName: nil)
    self.fetchedResultsController.delegate = self

    self.fetchedResultsController.MR_performFetch()

这适用于初始提取,但在添加数据后,它不会调用委托。删除谓词后,它会调用委托。

我还有其他方法吗?

【问题讨论】:

添加的数据是否满足events.@count > 0的要求? 是的。重新启动应用程序后(因此调用performFetch),它会更新显示添加的数据。 【参考方案1】:

fetch 谓词只能检查 Core Data 属性,因为对象本身仍然是错误的。 fetch 谓词不会获取请求实体的所有对象然后过滤它们,它只是获取通过过滤谓词的对象。

作为一种解决方法,您可以获取 Event 实体。然后使用部分键按对话分组。

【讨论】:

以上是关于NSFetchedResultsController 不使用谓词 @count 调用委托的主要内容,如果未能解决你的问题,请参考以下文章

在 Core Data 应用程序中调用 performFetch 后,是不是需要手动更新表视图?