【发布时间】:2013-11-27 15:34:30
【问题描述】:
我在我的项目中使用数据模型,有时我需要从服务器获取一些数据而不将其插入数据库。但我想使用我的模型来操作这些数据。但是每次我创建一个模型对象时,它都会在 managedObjectContext 执行save 方法时插入。
在这种情况下我该怎么办?我是否需要拥有这些类的副本但没有数据模型来操作对象中的数据而不将其插入数据库?
【问题讨论】:
标签: ios objective-c core-data
我在我的项目中使用数据模型,有时我需要从服务器获取一些数据而不将其插入数据库。但我想使用我的模型来操作这些数据。但是每次我创建一个模型对象时,它都会在 managedObjectContext 执行save 方法时插入。
在这种情况下我该怎么办?我是否需要拥有这些类的副本但没有数据模型来操作对象中的数据而不将其插入数据库?
【问题讨论】:
标签: ios objective-c core-data
但每次我创建一个模型对象时,它都会在 managedObjectContext 执行 save 方法时插入。
一种可能性是为这些瞬态对象使用单独的托管对象上下文。人们常说托管对象上下文就像一个用于操作数据的便笺簿。为临时使用创建新的上下文很容易,但前提是您设计的代码不会假定只有一个上下文。
这是一个很好的例子,说明如何使用单例很容易出错 - 许多应用使用单例对象(例如,应用委托)来轻松访问“托管对象”上下文。这在概念上很简单,但是如果你的类从某个单例中获取 MOC,你就不能告诉他们使用不同的 MOC。如果您改为设计您的类,以便调用者提供 MOC(或他们完成工作所需的任何对象),那么使用多个 MOC 将变得很容易。
【讨论】:
NSInMemoryStoreType 存储的单独 MOC,而不是“通常的”NSSQLiteStoreType。
您可以将nil 传递给NSManagedObject 的initWithEntity:insertIntoManagedObjectContext: 方法的上下文参数。这将创建一个不与任何上下文关联的对象,但在其他情况下会正常运行(awakeFromInsert 除外,不会被调用。
这在文档中明确提到,所以它不是黑客:
如果 context 不是 nil,则此方法调用 [context insertObject:self](这会导致调用 awakeFromInsert)。
【讨论】: