CoreData的自定义UID数据类型

时间:2009-08-28 22:04:09

标签: iphone core-data

CoreData文档说“你有时可以从创建自己的唯一ID(UUID)属性中受益,该属性可以为新插入的对象定义和设置。这允许您使用谓词有效地定位特定对象(尽管在保存操作之前新只能在原始语境中找到对象。“

这种类型应该使用什么?

托管对象的objectID通常是'NSManagedObjectID'类型,但是通过XCode的DataModel向导工具允许您设置给定属性的类型,除了'未定义',二进制数据和&变形。

如果我想要一个属性作为对象的辅助id(除了它的标准ObjectID),你是将它存储为NSString还是自定义修改对象模型以保存NSManagedObjectID?

(适用于iPhone应用/ CoreData开发)

1 个答案:

答案 0 :(得分: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属性。