我想了解更多核心数据,为什么我们“获取”并搜索实体,而实体是“内部”托管对象?例如:
NSManagedObjectContext *moc = [self managedObjectContext];
NSEntityDescription *entityDescription =
[NSEntityDescription entityForName:@"Employee" inManagedObjectContext:moc];
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:entityDescription];
另外,持久对象存储包含什么?如果我理解,持久对象存储从sqlite文件中获取数据,但它有点混淆,是:一个实体,对于一个持久对象存储,对于sqlite文件中的一个数据?
感谢您的回答
保
答案 0 :(得分:14)
这里基本上有5个组件。持久性存储协调器,托管对象上下文,托管对象模型,实体和托管对象。他们共同努力提供一个对象图管理系统(请注意,核心数据不一个ORM,所以它有助于不这样想)。下面是CoreData中与它们交互的组件和各种其他类的描述
NSPersistentStoreCoordinator
- 用于处理与磁盘之间的数据加载。它处理各种商店(NSPersistentStore
)。包含的商店类型是二进制,XML和SQLite。您可以编写自己的商店(使用NSAtomicStore
和NSIncrementalStore
类),例如,如果您有自己的文件类型(理论上,如果您愿意,您可以编写商店来打开Word或Photoshop文件) NSEntityDescription
- 实体可以被认为是托管对象的“类”。它定义了托管对象应具有的任何属性(NSAttributeDescription
),关系(NSRelationshipDescription
)和获取的属性(NSFetchedPropertyDescription
),以及NSManagedObject
等其他属性应该使用的子类NSManagedObjectContext
- 这是内存中的“便笺簿”。它是您查询对象(使用NSFetchRequests
),创建对象,删除对象等的地方。您可以拥有多个上下文,然后扔掉一个而不保存以丢弃您不再需要的任何更改。NSManagedObject
- 核心数据的核心单位。这些是保存数据的模型对象。您可以在它们上设置属性,关系等。NSManagedObjectModel
- 这表示用于数据的数据模型,通常在Xcode中创建的.mom文件中定义。这是存储所有实体的地方。这几乎就是整个核心数据。还有一些其他类用于执行迁移和合并