基于文档中的内容,使用
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:. 如果应用程序有多个存储,并且确实需要将对象分配给特定的存储,则不应在托管对象的初始值设定项方法中这样做。这种分配是控制器级逻辑,而不是模型级逻辑。