ios - 从上下文中分离(断开)核心数据实体

标签 ios objective-c core-data magicalrecord

我正在使用 magic record 来完成我所有的核心数据工作。

一切都很好,除了有时我在后台进行更新时我需要从上下文中分离或断开实体。

例如

ButtonList = [Buttons MR_findAllSortedBy:@"listOrder" ascending:YES];

如何保留实体,但删除对数组 ButtonList 的上下文的引用?

谢谢

最佳答案

只有当您不使用 NSFetchedResultsController 或观察上下文更改并从 UI 中删除已删除对象以反射(reflect)存储状态的代码时,才会发生这种情况。

如果您希望在上下文发现删除后立即从 View 中删除已删除的对象,则需要在主上下文中监听“上下文确实更改通知”并查看已删除的对象集,如果任何已删除的对象都是显示数组的一部分,您需要相应地更新 View (从数组中删除并更新表。NSFetchedResultsController 还会监听上下文更改)。

另一种选择:

因为你自己管理你的 tableview 状态(而不是 fetched results controller)并且 如果您希望“按钮”保留在 View 中,包括它们的属性,您可以:

将您的请求更改为返回字典而不是托管对象(删除时不作废):

NSFetchRequest* r = [Buttons MR_requestAllSortedBy:@"listOrder" ascending:YES];
[r setResultType:NSDictionaryResultType];

//This is your link to the data store and managed object (if you later need to fetch by or update if still exist)
NSExpressionDescription* objectIdDesc = [[NSExpressionDescription new] autorelease];
objectIdDesc.name = @"objectID";
objectIdDesc.expression = [NSExpression expressionForEvaluatedObject];
objectIdDesc.expressionResultType = NSObjectIDAttributeType;

[r setPropertiesToFetch:@[objectIdDesc,@"buttonName",@"buttonIcon"/*, and any other property you need for display*/]];

现在剩下要做的就是在您喜欢的任何上下文(甚至在后台)上执行此请求,并将数组返回给您的 TableView Controller 。

这里的区别是你得到的是字典而不是 NSManagedObject 数组。

关于ios - 从上下文中分离(断开)核心数据实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22028176/

相关文章:

ios - 检测 UIWebView ScrollView 的 contentSize 的变化

iphone - Objective-C 中类的内存大小

ios - xcode 6中启动屏幕中的动画

swift - 从 CoreData 刷新 NSTreeController

iphone - 获取属于与核心数据一对多关系的实体的所有对象

ios - 在 iOS 中使用预定义的文本从 App 打开电子邮件

ios5 - UITableViewCell 子类中的 IFTweetLabel 未显示

iphone - 从 PDF 中提取图像

ios - UITableView,不可见区域的另一个单元格有一个复选标记,而可见区域的一个单元格被触摸

ios - 休息套件 : How to manually set the value of a managed object property?