如何获取保存到Core Data的托管对象上下文的对象的ID?

Spa*_*nky 5 core-data objective-c nsmanagedobjectcontext

我有这个代码:

NSEntityDescription *userEntity = [[[engine managedObjectModel] entitiesByName] objectForKey:@"User"];
User *user = [[User alloc] initWithEntity:userEntity insertIntoManagedObjectContext:[engine managedObjectContext]];
Run Code Online (Sandbox Code Playgroud)

我想知道插入到托管对象上下文的对象的id.我怎么能得到它?

对于该对象的生命周期,该id是否保持不变,或者它是否会持久保存到此下面的sqlLite数据库,并且可以用于在获取操作期间唯一地标识它(我的最终目标).

任何帮助赞赏// :)

Tec*_*Zen 10

如果要永久保存对象的ID,您需要:

  1. 将对象保存到上下文中,以便ID从临时ID更改为永久ID.
  2. 使用提取永久ID的URI版本-[NSManagedObjectID URIRepresentation].返回一个NSURL,您可以将其存储为另一个托管对象中的可转换属性.
  3. 您可以通过使用-[NSPersistentStoreCoordinator managedObjectIDForURIRepresentation:]生成新NSManagedObjectID对象-[NSManagedObjectContext objectWithID:]来获取对象,然后使用它来获取实际引用的托管对象.

URI应该标识特定计算机上特定存储中的特定对象,但如果对存储进行任何结构更改(例如将其迁移到新的模型版本),则可以更改该URI.

但是,您可能不需要执行任何操作.与其他数据模型系统相比,ObjectID在Core Data中扮演的角色要小得多.Core Data维护一个对象图,该对象图根据图中的位置唯一标识对象.只需遍历图形关系即可转到特定的唯一对象.

您真正需要ObjectID的唯一时间是在两个或多个持久性存储中访问对象时.你需要它们,因为关系不会跨越商店.