核心数据:保存唯一对象ID

Nic*_*ard 6 iphone core-data objective-c nsmanagedobject ios

我看到有一种获取托管对象的唯一ID的方法:

NSManagedObjectID *moID = [managedObject objectID];
Run Code Online (Sandbox Code Playgroud)

但是,正如我所读到的那样,它会在保存时发生变化.

有什么更好的方法来创建我自己的唯一ID并将其保存在每个对象中,确保它是唯一的并且不会改变?

Leo*_*rdo 16

您无法将NSManagedObjectID保存在CoreData实体中,并且其中没有可用作整数或字符串ID的属性.因此,构建自己的唯一标识符算法是一种可接受的解决方案,如果您无法在实体保存时跟踪,我会为某些应用程序执行此操作.

例如,我之前有一个类似的问题,当我需要使用对实体的引用填充UITableView单元格,并在单击/触摸单元格后检索实体.

我通过使用uri表示找到了一个建议,但是我之前仍然需要保存上下文,但我设法使用NSFetchedResultsController并找到了一个更加可靠的解决方案而不是应用程序构建的id.

[[myManagedObject objectID] URIRepresentation];
Run Code Online (Sandbox Code Playgroud)

然后,您可以稍后检索托管对象ID本身:

NSManagedObjectID* moid = [storeCoordinator managedObjectIDForURIRepresentation:[[myManagedObject objectID] URIRepresentation]];
Run Code Online (Sandbox Code Playgroud)

使用模型,我可以检索您的托管对象.


Nic*_*ard 5

我在我的对象中有一个创建的日期属性,所以我最终使用了包含秒的日期,在我看来,它似乎是独一无二的,并且按照我的意愿工作.