如何使用临时对象 CoreData?

Posted

技术标签:

【中文标题】如何使用临时对象 CoreData?【英文标题】:How to work with temporary objects CoreData? 【发布时间】:2014-05-24 06:49:26 【问题描述】:

我将 lib MagicalRecord (https://github.com/magicalpanda/MagicalRecord) 用于 CoreData.framework。

我不明白如何使用临时对象。

如何为临时对象创建NSManagedContext,关闭控制器后是否删除每个NSManagedObject?

【问题讨论】:

【参考方案1】:

在上下文中创建的所有对象都是临时对象,当您保存该上下文时,它们将变为永久对象。所以要丢弃它们,你只是不保存那个上下文。

假设您使用 Apple 的核心数据堆栈来创建新的(临时)上下文:

NSManagedObjectContext *tempChildContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
tempChildContext.parentContext = self.appDelegate.managedObjectContext;

要保存更改,您需要进行两次保存,一次在临时上下文中,然后将其推送到主上下文中。

[tempChildContext performBlock:^
   // do something that takes some time asynchronously using the temp context

   // push to parent
   NSError *error;
   if (![tempChildContext save:&error])
   
      // handle error
   

   // save parent to disk asynchronously
   [self.appDelegate.managedObjectContext performBlock:^
      NSError *error;
      if (![self.appDelegate.managedObjectContext save:&error])
      
         // handle error
      
   ];
];

对不起,我不记得如何使用 MagicalRecord 来实现,但 MR 只是 CoreData 的包装器,所以它可以工作。我停止在我的第一个 CoreData 项目中使用 MR。我建议您阅读以下内容:Multi-Context CoreData。

【讨论】:

以上是关于如何使用临时对象 CoreData?的主要内容,如果未能解决你的问题,请参考以下文章

既然 objectID 在临时对象和永久对象之间发生变化,如何有效地处理 Core Data 中的临时对象?

CoreData:持久和临时存储

CoreData - 如何使用 validateForDelete:确定是不是应删除托管对象

如何使用CoreData获取相关实体的对象?

如何使用 NSPredicate 通过 CoreData 中的 NSSet 属性的元素过滤对象?

同时使用 CoreData、多线程和绑定