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

Pau*_*aul 4 entities core-data nsmanagedobject

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

NSManagedObjectContext *moc = [self managedObjectContext];  
NSEntityDescription *entityDescription =
    [NSEntityDescription entityForName:@"Employee" inManagedObjectContext:moc];  
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];  
[request setEntity:entityDescription];
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的回答

保罗

Mar*_*ton 14

基本上这里有5个组件.持久性存储协调器,托管对象上下文,托管对象模型,实体和托管对象.它们共同提供了一个对象图管理系统(请注意,Core Data 不是一个ORM,因此它不会以这种方式来考虑它).下面是CoreData中与它们交互的组件和各种其他类的描述

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

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

  • 托管对象模型包含所有实体。托管对象上下文包含所有托管对象。每个托管对象都有一个实体(就像每个对象都有一个类一样)。 (2认同)
  • 不是.托管对象就像一个实体的实例.如果你在想象它之前完成了数据库工作,那么实体就是一个表,一个托管对象就是一行.您指定要过滤受管对象的实体.在您给出的示例中,您将获取实体Employee的所有托管对象.再说一次,如果你之前已经完成了数据库的工作,那么就SQL而言,你可能已经完成了`SELECT*FROM Employee` (2认同)