防止托管对象被 Core Data 再次出错

Posted

技术标签:

【中文标题】防止托管对象被 Core Data 再次出错【英文标题】:Preventing managed objects from being re-faulted by Core Data 【发布时间】:2011-01-29 07:06:43 【问题描述】:

我有一个模拟树结构的对象图。我希望获取(没有错误)一个完整的树结构由我(用户)自行决定将其保留在托管对象上下文中,以便根据树的结构进行修改和计算。结构中的对象还将在它们在 MOC 中的时间段内保持对非托管对象的引用。

这可能吗?如果可以,可以通过哪些方式实现?

注意:我意识到这是对 Core Data 的轻微滥用。

【问题讨论】:

【参考方案1】:

你不能直接使用Core Data来做,如果出现内存警告,它总是会尝试清除内存。

但是,如果您总是希望它在内存中,您可以创建一个包装器对象,即

@class MyObject 
  NSManagedObject *thisIsWhatIRepresent;

  NSString *someProperty;


- (id)initWithManagedObject:(NSMagagedObject *)managedObject;

@property (nonatomic, copy) NSString *someProperty;

@end

当你初始化它时,你将所有属性从托管对象复制到这个对象的属性中。那么你的托管对象是否出现故障也没关系 - 这个对象有数据的副本。

您必须确保对对象的任何更改也会更改托管对象,尽管您可以等到有一些更改并一次保存它们?

注意:这是一个混乱的解决方案。我的建议是按预期使用 Core Data 或根本不使用 :)

【讨论】:

我想到了类似的东西,很快就得出了和你一样的结论:很乱。 “我的建议是按预期使用 Core Data 或根本不使用 :)”...我想我会得到至少一个这样的回应 :-) 直到我看到问题底部的注释,这将是我的全部答案;)我认为无论如何你都会得到一个混乱的解决方案,抱歉!

以上是关于防止托管对象被 Core Data 再次出错的主要内容,如果未能解决你的问题,请参考以下文章

在后台线程上安全保存 Core Data 托管对象上下文的正确方法?

如何在通过 Core Data 保存我的 RestKit 托管对象之前对其进行修改?

使用 Core Data 时,是不是保留非托管对象类及其托管对象版本

如何通过 NSPredicate 过滤 Core Data 托管对象?

Core Data 3 托管对象上下文

Core Data - 通过 URI 获取托管对象