在 Core Data 中存储 UUID (用于全局多系统对象标识)的最佳方法是什么?考虑存储大小和索引能力。
理想情况下,它将以二进制数据(128 位)的形式存储,但这样做是否存在问题?与将其存储为 NSString 相比,以这种方式存储将更加高效,但我只是想确认以二进制数据形式存储是否存在性能问题。它是否仍将被正确地作为二进制数据进行索引?在可变宽度字段中存储有效地固定宽度二进制数据是否存在任何缺点?
我对 SQLite 及其存储/索引机制并不熟悉,因此想寻求一些建议!
在 Core Data 中存储 UUID (用于全局多系统对象标识)的最佳方法是什么?考虑存储大小和索引能力。
理想情况下,它将以二进制数据(128 位)的形式存储,但这样做是否存在问题?与将其存储为 NSString 相比,以这种方式存储将更加高效,但我只是想确认以二进制数据形式存储是否存在性能问题。它是否仍将被正确地作为二进制数据进行索引?在可变宽度字段中存储有效地固定宽度二进制数据是否存在任何缺点?
我对 SQLite 及其存储/索引机制并不熟悉,因此想寻求一些建议!
iOS 11起,您可以直接在Core Data编辑器中设置UUID属性。UUID将自动存储为二进制。
然后,您可以使用UUID
(在Obj-C中为NSUUID
)获取您的Core Data对象。
static func fetch(with identifier: UUID) -> AudioRecord? {
var record: AudioRecord?
moc.performAndWait {
let fetchRequest = AudioRecord.request
fetchRequest.predicate = NSPredicate(format: "identifier == %@", identifier as CVarArg)
fetchRequest.fetchLimit = 1
record = (try? fetchRequest.execute())?.first
}
return record
}
NSManagedObject.awakeFromInsert()
中设置 primitiveIdentifier = UUID()
,这样你的 Core Data 对象就会始终具有默认标识符(非 nil)。 - Jonny@NSManaged var identifier: UUID
和@NSManaged private var primitiveIdentifier: UUID
。 - Jonny我将我的 UUID 存储为“可转换”并且它工作得很好。
将以下代码添加到您的 NSManagedObject
子类中:@NSManaged var uuid: NSUUID!
在您的核心数据模型 (.xcdatamodel 文件) 中,创建一个名称为uuid
的属性,类型为Transformable
查询也很好用,我编写谓词来搜索它们,如下所示:
request.predicate = NSPredicate(format: "uuid == %@", withUuid)