CoreData 的自定义 UID 数据类型
Posted
技术标签:
【中文标题】CoreData 的自定义 UID 数据类型【英文标题】:Custom UID data type for CoreData 【发布时间】:2009-08-28 22:04:09 【问题描述】:CoreData 文档说“您有时可以从创建自己的唯一 ID (UUID) 属性中受益,该属性可以为新插入的对象定义和设置。这允许您使用谓词有效地定位特定对象(尽管在保存操作之前 new对象只能在其原始上下文中找到)。”
这种类型应该使用什么?
托管对象的 objectID 通常是“NSManagedObjectID”类型,但通过 XCode 的 DataModel 向导工具允许您为给定属性设置类型,除了“未定义”、二进制数据和可转换之外,它仅具有基本允许的类型。
如果我想要一个属性作为对象的辅助 id(除了它的标准 ObjectID),您是将其存储为 NSString 还是自定义修改对象模型以保存 NSManagedObjectID?
(用于 iPhone 应用/CoreData 开发)
【问题讨论】:
【参考方案1】:NSString 或整数属性是合乎逻辑的选择,尽管您可以使用可转换的属性来存储您想要的任何内容(当然,可以适当地序列化)。递增整数可能足以满足多种用途,但每个用例都不同。网络上存在许多用于生成字符串或字节数组 UUID 的算法(从 Google 开始)。 NSString UUID 非常简单:
+(NSString*)UUIDString
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
CFRelease(theUUID);
return [NSMakeCollectable(string) autorelease];
对于字节数组,请查看CFUUIDGetUUIDBytes()
。
在你走这条路之前,请仔细考虑是否有必要。从 SQL 的角度来看,人们“想要”他们的 id,但 Core Data 与关系数据库无关。它是一个对象图管理框架,恰好使用 SQLite 作为一个支持实现。如果你试图在 Core Data 中做类似 SQL 的事情,你将与框架作斗争。在正确使用 Core Data 框架时,通常需要一个单独的 id 属性。
【讨论】:
最后一行应该是return [NSMakeCollectable(string) autorelease];
以便在 GC 和保留/释放模式下进行正确的内存管理。以上是关于CoreData 的自定义 UID 数据类型的主要内容,如果未能解决你的问题,请参考以下文章