NSFetchedResultsController始终包含临时对象

时间:2016-01-21 18:25:49

标签: ios core-data nsfetchedresultscontroller

我设置了NSFetchedResultsController,如下所示:

        let fetchRequest = NSFetchRequest(entityName: "Order")
        fetchRequest.includesPendingChanges = false
        fetchRequest.sortDescriptors = [
            NSSortDescriptor(key: "status", ascending: false),
            NSSortDescriptor(key: "date", ascending: false)]

        self.fetchedResultsController = NSFetchedResultsController(
            fetchRequest: fetchRequest,
            managedObjectContext: DataStoreManager.sharedInstance.mainContext,
            sectionNameKeyPath: "section",
            cacheName: nil)

        do {
            try self.fetchedResultsController.performFetch()

        } catch let error as NSError {
            print(error)
        }

问题是即使将includesPendingChanges设置为false,每次在上下文中创建新对象时仍会调用controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?)(不保存)。

我还应该寻找其他方法来避免这种情况吗?

1 个答案:

答案 0 :(得分:5)

推荐的方法是使用子上下文。父项应该是获取结果控制器中使用的主线程管理对象上下文。

如果保存,更改会立即“推送”到主上下文,即获取的结果控制器。 (保存主要上下文以持久存储到持久性存储。)

如果您不想保存,只需丢弃子上下文而不保存。获取的结果控制器永远不会知道它。