ios - CoreData iOS - 如何为对象创建唯一ID?

标签 ios objective-c core-data auto-generate

我有一个针对 iPhone 和 iPad 等的 IOS 项目。对于该项目,我使用 CoreData 来保存用户在应用程序中提供的数据。为了便于理解,我们可以说它就像一个联系人应用程序。所以基本上你知道你有你的名字、工作、电话等。这个应用程序还为每个“联系人”存储一张图像。当然可以选择。为了防止数据库效率低下,我使用以下代码作为路径将图像存储到 DocumentsDirectory 中。使用 ManagedObjects id 调用图像,该 id 也是图像名称中使用的内容。但是,多个对象可以具有相同的 id,这会导致一些问题。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,     NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"Person%i.jpg",[[_detailItem id] intValue]]];

基本上我是使用人的 ID 来拍摄图像。但是,多个人可以拥有相同的 id(int-32)。我没有这样做,而是想知道 CoreData 是否有一种方法可以为每个存储的对象创建或创建一个唯一的 id。这样,如果我更改 id,它不会丢失其图片,或者如果另一个对象具有相同的 id,它也不会使用相同的图片。

我曾经使用过的一些数据库,比如 MySQL,有一个属性选项,可以给它一个唯一的 id,供用户/论坛/帖子/等使用... XCode 的 CoreData 中有类似的东西吗?我不想解析每个对象以获得尚未使用的数字。

最佳答案

Some databases like a MySQL I used to use...

使用 Core Data 时不要再考虑 MySQL。这样做只会导致问题。

托管对象有一个唯一的 ID 字段,您可以使用 objectID(类型为 NSManagedObjectID)进行查找。它是一个不透明的类,但您可以使用其 URIRepresentation 方法将其转换为 NSURL。从那里您可以将其转换为字符串并将其用作图像文件名。

只要您只使用一台设备,这些 ID 就是唯一的。如果您在设备之间同步数据,一台设备上的 ID 将与另一台设备上的 ID 不匹配。该 ID 供 Core Data 内部使用,并且仅在同一持久存储文件内保持一致。

如果你确实想要一个整数,你必须自己维护它。将最新整数的值存储在用户默认值或持久存储文件的元数据中。当您创建新实例时,您将读取整数,递增它,将其用于新实例,然后保存新值。

更简单的方法是使用 UUID 作为唯一 ID。通过执行以下操作获取新的唯一 ID:

NSString *newID = [[NSUUID UUID] UUIDString];

将其存储为属性,并将其用作图像文件名的一部分。

关于ios - CoreData iOS - 如何为对象创建唯一ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33504947/

相关文章:

ios - 实体最后修改日期

ios - 了解如何正确使用 NSRegularExpressions

ios - 如何修复 EzAudio swift iOS 13 中的 "Failed to fill complex buffer in float converter"

ios - 从自定义单元格 UITableView 中删除行

Objective-C 运行时

ios - 以编程方式删除 UIButton 背景颜色

swift - 将核心数据同步到 CloudKit 公共(public)数据库

iphone - NSFetchedResultsController - 何时触发委托(delegate)方法?

ios - 在 iOS 中访问用户联系人的问题

iphone - 在 Socket :didReadData:withTag 上调用时 CocoaAsyncSocket 似乎失败