Swift 如何在context.save()之前告诉NSPredicate跳过实体

Swift 如何在context.save()之前告诉NSPredicate跳过实体,swift,core-data,nsfetchedresultscontroller,predicate,Swift,Core Data,Nsfetchedresultscontroller,Predicate,如何防止在保存viewContext之前触发控制器(:didChangeContentWith:diff)? 创建NSManagedObject对象后,我将启动控制器(:didChangeContentWith:diff),并在保存上下文后,为同一对象启动两次 首先,我创建NSFetchedResultsController并设置fetchRequest.predicate fetchedResultsController.fetchRequest.predicate = nil 然后,当我添

如何防止在保存viewContext之前触发控制器(:didChangeContentWith:diff)? 创建NSManagedObject对象后,我将启动控制器(:didChangeContentWith:diff),并在保存上下文后,为同一对象启动两次

首先,我创建NSFetchedResultsController并设置fetchRequest.predicate

fetchedResultsController.fetchRequest.predicate = nil
然后,当我添加项目时:

let newItem = Item(context: context) //controller fires right after this #1
...
...
context.save() // Fires here too #2

第一次objectID是错误的,第二次它是正确的,并且是根据上下文设置的。所以,有没有办法告诉谓词跳过在context.save()之前创建的实体?

目前我找到的唯一方法是过滤结果。它适合我,因为我有自己的自定义UI更新逻辑,不确定它是否适合每个人

lists = fetchLists().filter { !$0.objectID.isTemporaryID }
其中,列出了是[NSManagedObject](子类)。所以,当CoreData发生更改时,我只需使用所需的谓词进行提取,并过滤掉所有临时ID。当项目获得正确的ID时,控制器(:didChangeContentWith:diff)再次启动,一切正常


仍在寻找通过跳过isTemporaryID对象进行获取的方法。

目前我找到的唯一方法是过滤结果。它适合我,因为我有自己的自定义UI更新逻辑,不确定它是否适合每个人

lists = fetchLists().filter { !$0.objectID.isTemporaryID }
其中,列出了是[NSManagedObject](子类)。所以,当CoreData发生更改时,我只需使用所需的谓词进行提取,并过滤掉所有临时ID。当项目获得正确的ID时,控制器(:didChangeContentWith:diff)再次启动,一切正常

仍在寻找通过跳过isTemporaryID对象进行获取的方法