如何在不插入模型对象的情况下使用它? [复制]

Posted

技术标签:

【中文标题】如何在不插入模型对象的情况下使用它? [复制]【英文标题】:How can I use a model object without inserting it? [duplicate] 【发布时间】:2013-11-27 15:34:30 【问题描述】:

我在我的项目中使用数据模型,有时我需要从服务器获取一些数据而不将其插入数据库。但我想使用我的模型来操作这些数据。但是每次我创建一个模型对象时,它都会在 managedObjectContext 执行save 方法时插入。

在这种情况下我该怎么办?我是否需要拥有这些类的副本但没有数据模型来操作对象中的数据而不将其插入数据库?

【问题讨论】:

【参考方案1】:

但每次我创建一个模型对象时,它都会在 managedObjectContext 执行 save 方法时插入。

一种可能性是为这些瞬态对象使用单独的托管对象上下文。人们常说托管对象上下文就像一个用于操作数据的便笺簿。为临时使用创建新的上下文很容易,但前提是您设计的代码不会假定只有一个上下文。

这是一个很好的例子,说明如何使用单例很容易出错 - 许多应用使用单例对象(例如,应用委托)来轻松访问“托管对象”上下文。这在概念上很简单,但是如果你的类从某个单例中获取 MOC,你就不能告诉他们使用不同的 MOC。如果您改为设计您的类,以便调用者提供 MOC(或他们完成工作所需的任何对象),那么使用多个 MOC 将变得很容易。

【讨论】:

特别是,您可以使用基于 NSInMemoryStoreType 存储的单独 MOC,而不是“通常的”NSSQLiteStoreType 您好,谢谢您的回答。如何创建新的 MOC?它是为应用程序保存的吗? 你的答案很好,但另一个比这个简单。【参考方案2】:

您可以将nil 传递给NSManagedObject 的initWithEntity:insertIntoManagedObjectContext: 方法的上下文参数。这将创建一个不与任何上下文关联的对象,但在其他情况下会正常运行(awakeFromInsert 除外,不会被调用。

这在文档中明确提到,所以它不是黑客:

如果 context 不是 nil,则此方法调用 [context insertObject:self](这会导致调用 awakeFromInsert)。

【讨论】:

谢谢,但它不会产生异常吗? 我不知道,我只是问问 嘿,您的回答对我有用,并且应用程序不会因此而崩溃。感谢您的帮助

以上是关于如何在不插入模型对象的情况下使用它? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在不复制对象的情况下向 Python 公开返回 C++ 对象的函数?

如何在不插入新对象的情况下从数据库更新对象?

如何在不指向 Java 源列表中的对象的情况下复制 ArrayList? [复制]

如何在不替换 ES6/Javascript 中的整个属性的情况下深度复制对象 [重复]

如何在不将实例模型添加到数据库的情况下向实体模型添加FK约束?

如何在不生成 SettingWithCopyWarning 的情况下将列插入 DataFrame