【问题标题】:Right Usage of NSManagedObjects in Core Data在 Core Data 中正确使用 NSManagedObjects
【发布时间】:2013-10-22 02:25:16
【问题描述】:

我目前正在深入研究 Core Data,并且对使用 Core Data NSManagedObject 模型有些困惑。

例如,我会有一个 "Contact" 实体,它具有 firstname、lastname、address 等属性...

我想了解的是,如果可能的话,是否有任何“最佳实践”将 NSManagedObject 用作​​常规 NSObjects。

例如,我有一个服务器以 JSON 格式返回一些联系人数据,但我想将它作为某种 NSObject 返回,因此它会有自己的属性、方法等......但另一方面它会愚蠢地创建 2 个类来表示联系实体 - 一个用于处理我想从服务器数据 (NSObject) 提供经过清理的对象的情况,另一个用于处理核心数据 (NSManagedObject) 的情况。有什么方法可以将单个对象用于两个目的?在这种情况下,最佳做法是什么?

编辑: 这是我遇到的一般问题:http://pastebin.com/WHWNqj2f

【问题讨论】:

  • 最佳实践是为这两种情况使用一个对象。只需在您的 NSManagedObhect 中实现自定义初始化方法 ([[YourObject alloc] initWithJSONDictionary: ..]) 并分配相应的值
  • @CarlJ - 问题是我不能只初始化一个 NSManagedObject 而不给它一个上下文。此外,我无法创建可与 Core Data 一起使用的 NSObject。这正是我遇到的问题。
  • 然后创建一个 NSManageObject 将值传递给它并且不保存上下文。
  • 必须能够不受限制地随机保存上下文......这是问题的一部分。例如,我有一个新创建的“联系人”对象的数组,我正在将它们与我目前在我的 SQLite 中的对象进行比较。在那条路上的某个地方,我可能不得不用一些新的更新来保存上下文,但我不希望 NSArray 中的对象包含在其中。有点难以解释,希望你明白我的意思。
  • sry,我不明白具体问题,但我总是建议使用 NSManagedObject。

标签: ios core-data nsmanagedobject nsmanagedobjectmodel


【解决方案1】:

没有必要为此设置一个以上的类——在所有情况下都使用托管对象。您在 cmets 中提到 “我不能只初始化一个 NSManagedObject 而不给它一个上下文”,但事实上这不是真的。当您使用[NSManagedObject initWithEntity:insertIntoManagedObjectContext:][NSEntityDescription insertNewObjectForEntityForName:inManagedObjectContext:] 创建托管对象时,您不必提供托管对象上下文。如果该参数是nil,则可以,只要您提供有效的NSEntityDescription。你得到的是一个不绑定到任何托管对象上下文的托管对象。这对于临时对象很方便,因为您可以在您拥有的任何托管对象上下文中保存更改,而无需保存此对象。

如果您想稍后将对象保存到托管对象上下文,请使用[NSManagedObjectContext insertObject:]。此时托管对象与上下文相关联,因此保存对上下文的更改将保存对象。

【讨论】:

  • 嘿,汤姆,谢谢 - 我曾经使用这种方法,但这阻止了我使用 MagicalRecord ......所以不幸的是,我正在尝试修复它。使用 2 个单独的上下文的建议可行吗?
猜你喜欢
  • 1970-01-01
  • 2022-01-19
  • 2014-05-27
  • 2015-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-28
相关资源
最近更新 更多