如何在CoreData与Swift中仅获取已保存至Context的对象并忽略临时对象
解决CoreData FetchRequest只返回已保存对象的方法
你可以通过给FetchRequest添加**谓词(Predicate)**过滤掉临时未提交的对象,核心逻辑是利用CoreData对象的objectID属性:未保存的临时对象的objectID.isTemporaryID会返回true,我们只需筛选出该值为false的对象即可。
修改后的代码如下:
FetchRequest( sortDescriptors: [SortDescriptor(\.name, order: .forward)], predicate: NSPredicate(format: "objectID.isTemporaryID == NO") )
如果想要更类型安全的写法,也可以使用Swift键路径:
FetchRequest( sortDescriptors: [SortDescriptor(\.name, order: .forward)], predicate: NSPredicate(format: "%K == NO", #keyPath(NSManagedObject.objectID.isTemporaryID)) )
补充说明
- 这个谓词会让FetchRequest仅查询已持久化到Context中的对象,自动排除未保存的临时实例。
- 若你在其他业务逻辑中需要区分临时/已保存对象,也可以直接用
managedObject.objectID.isTemporaryID这个判断条件。
内容的提问来源于stack exchange,提问作者christophriepe
相关产品推荐
相关产品推荐

