代码之家  ›  专栏  ›  技术社区  ›  AechoLiu

关于获取新的NSManagedObject对象

  •  8
  • AechoLiu  · 技术社区  · 14 年前

    我看了核心数据指南,有两种方法可以获得新的NSManagedObject实例。

    • -初始化ithEntity:插入ManagedObjectContext: NSManagedObject类的
    • +insertnewObjectForEntityForName:inManagedObjectContext: NSEntityDescription类的

    1 回复  |  直到 14 年前
        1
  •  7
  •   Community CDub    5 年前

    基于文档中的内容,使用 NSEntityDescription

    在开发的早期阶段,当事情不断变化时,它是有用的,但它可能是一个风险因素,因为如果你拼写错了你的类的名称,你不会得到任何编译错误或警告,因为它是一个字符串。

    方法来自 NSManagedObject

    - initWithEntity:insertIntoManagedObjectContext: (保留计数==+1)

    + insertnewObjectForEntityForName:inManagedObjectContext: (保留计数==0)

    这是文件

    NSEntityDescription Class Reference ( insertNewObjectForEntityForName:inManagedObjectContext: )

    返回值

    名为entityName的实体的新的、自动释放的、完全配置的类实例。实例具有其实体描述集,并将其插入到上下文中。

    讨论

    该方法在macosxv10.4上特别有用,因为您可以使用它来创建新的托管对象,而不必知道用于表示实体的类。在开发生命周期的早期,当类和类名不稳定时,这尤其有益。

    在MacOSXV10.5及更高版本和iOS上,您可以改用initWithEntity:插入ManagedObjectContext:返回实体的相应类的实例。

    NSManagedObject Class Reference initWithEntity:insertIntoManagedObjectContext: )

    返回值

    讨论

    NSManagedObject使用动态类生成来支持Objective-c2属性特性(请参见声明的属性),方法是自动创建适合于实体.initWithEntity:insertIntoManagedObjectContext:因此返回实体的相应类的实例。动态生成的子类将基于实体指定的类,因此在模型中指定自定义类将取代传递给alloc的类。

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

    在许多应用程序中,不需要随后将新创建的托管对象分配给特定的storesee assignObject:TopPersistentStore:. 如果应用程序有多个存储,并且确实需要将对象分配给特定的存储,则不应在托管对象的初始值设定项方法中这样做。这种分配是控制器级逻辑,而不是模型级逻辑。