核心数据:托管对象和实体之间的差异?

时间:2011-08-01 20:25:08

标签: core-data nsmanagedobject entities

我想了解更多核心数据,为什么我们“获取”并搜索实体,而实体是“内部”托管对象?例如:

NSManagedObjectContext *moc = [self managedObjectContext];  
NSEntityDescription *entityDescription =
    [NSEntityDescription entityForName:@"Employee" inManagedObjectContext:moc];  
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];  
[request setEntity:entityDescription];

另外,持久对象存储包含什么?如果我理解,持久对象存储从sqlite文件中获取数据,但它有点混淆,是:一个实体,对于一个持久对象存储,对于sqlite文件中的一个数据?

感谢您的回答

1 个答案:

答案 0 :(得分:14)

这里基本上有5个组件。持久性存储协调器,托管对象上下文,托管对象模型,实体和托管对象。他们共同努力提供一个对象图管理系统(请注意,核心数据一个ORM,所以它有助于不这样想)。下面是CoreData中与它们交互的组件和各种其他类的描述

  • NSPersistentStoreCoordinator - 用于处理与磁盘之间的数据加载。它处理各种商店(NSPersistentStore)。包含的商店类型是二进制,XML和SQLite。您可以编写自己的商店(使用NSAtomicStoreNSIncrementalStore类),例如,如果您有自己的文件类型(理论上,如果您愿意,您可以编写商店来打开Word或Photoshop文件)
  • NSEntityDescription - 实体可以被认为是托管对象的“类”。它定义了托管对象应具有的任何属性(NSAttributeDescription),关系(NSRelationshipDescription)和获取的属性(NSFetchedPropertyDescription),以及NSManagedObject等其他属性应该使用的子类
  • NSManagedObjectContext - 这是内存中的“便笺簿”。它是您查询对象(使用NSFetchRequests),创建对象,删除对象等的地方。您可以拥有多个上下文,然后扔掉一个而不保存以丢弃您不再需要的任何更改。
  • NSManagedObject - 核心数据的核心单位。这些是保存数据的模型对象。您可以在它们上设置属性,关系等。
  • NSManagedObjectModel - 这表示用于数据的数据模型,通常在Xcode中创建的.mom文件中定义。这是存储所有实体的地方。

这几乎就是整个核心数据。还有一些其他类用于执行迁移和合并