如何使用对象的UUID获取对象?我有一个对象(TimeCode),它的id属性在xcdatamodel文件中具有UUID类型。我想通过在标准CoreData中使用这个id属性从NSPredicate中获取这个类型的对象,但是我收到了一个编译错误,说我必须使用id作为CVarArg。但是在运行时,当我实际调用函数时,程序崩溃了,因为不能将ObjectIdentifier类型转换为CVarArg。
以下是完整的代码:
func fetchTimeCode(id: ObjectIdentifier) -> TimeCode? {
var timeCodes = [TimeCode]()
let request: NSFetchRequest<TimeCode> = TimeCode.fetchRequest()
request.predicate = NSPredicate(format: "id == %@", id as! CVarArg)
do {
timeCodes = try self.moc.fetch(request)
}
catch let error as NSError {
print("Error fetching for editing.")
print(error)
}
print("fetch request id: \(id)")
return timeCodes.first
}任何帮助都将不胜感激。我四处寻找,却找不到任何答案。现在看来,最好的解决方案是将id存储为字符串,但这似乎并不特别优雅。如果您不能轻松地使用UUID来获取对象,那么为您的对象设置UUID又有什么意义呢?
更新:这是我的TimeCodeViewModel类代码。
class TimeCodeViewModel: Identifiable {
var id: ObjectIdentifier
var fullName = ""
init(timeCode: TimeCode) {
self.id = timeCode.id
self.fullName = timeCode.fullName!
}
// class methods
}发布于 2021-09-07 05:49:52
在我的例子中,它与以下谓词一起工作:
func getItem(with id: UUID?) -> Item? {
guard let id = id else { return nil }
let request = Item.fetchRequest() as NSFetchRequest<Item>
request.predicate = NSPredicate(format: "%K == %@", "id", id as CVarArg)
guard let items = try? context.fetch(request) else { return nil }
return items.first
}更重要的是,我使用的是UUID (同样的情况在Martin建议的答案中),而不是ObjectIdentifier。绝对有可能基于UUID获取项目。
请尝试将函数中的参数类型更改为UUID
https://stackoverflow.com/questions/69081265
复制相似问题