【问题标题】:How to create instances of nsmanagedobject without coredata?如何在没有 coredata 的情况下创建 nsmanagedobject 的实例?
【发布时间】:2012-10-22 23:33:45
【问题描述】:

我有一个非常烦人的 coredata 问题。 我有一个 NSManagedObject 子类,即“客户”,一切都很好。 有时我需要在 coredata 堆栈之外创建一个新客户,只有在某些情况下我需要保存它。

我知道我可以使用 NSUndomanager,但这似乎不是一个好主意。

现在我有两个类 Customer_managed(NSManagedObject 的子类)和 Customer_unmanaged(NSObject 的子类)。 在 Customer_unmanaged 我添加了一个 -(void)save 方法,但这两个类非常耦合,我正在寻找一个最佳模式。

谢谢

【问题讨论】:

  • 您不打算在文档中指定的上下文之外创建实例。为什么需要这样做?也许有另一种方法可以避免这样做。

标签: core-data nsmanagedobject


【解决方案1】:

可以在没有上下文的情况下创建 NSManagedObject。 Marcus Zarra 写了关于它in this SO-answer。忠告:如果您尝试使用 nil-context 创建对象,awakeFromInsert: 将不会被调用。

【讨论】:

    【解决方案2】:

    您以错误的方式处理此问题。您应该始终使用托管对象上下文来创建托管对象。如果要丢弃它,只需在保存前删除该对象,它就永远不会触及持久存储。

    如果您想将这两个实体分开,请考虑使用单独的上下文。

    或者,考虑保存“非托管”实体,但用额外的布尔属性unmanaged 标记它们。然后,您可以随时清除它们或在提取时忽略它们。

    【讨论】:

    • 在我的情况下,在保存之前删除不是一个好主意,也许我的方法完全错误,但我需要非托管对象。第二个想法非常聪明,我可以添加一个布尔值并仅在我需要为该对象添加持久性时设置为 true。但我需要改变我以前的 fechrequst,所以......我选择了 Adun Kjelstrup 答案。谢谢大家。
    • 这个想法是能够传递他的托管对象中的信息,以防它像任何其他普通普通类一样仅在内部使用。制作具有相同成员的副本类可以解决问题,但会产生难以维护的冗余代码。所以单独的上下文并不完全正确,因为不需要或不需要上下文。以这种方式保持内部使用的类只是浪费 CPU 周期、内存和“磁盘”空间。是的,我需要同样的东西,这让我意识到 MySQL 或 SQLite 数据库会比 Core Data 更好。
    猜你喜欢
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多