gre*_*117 1 uuid core-data swift swiftui
如何使用 UUID 获取对象?我有一个对象 ( TimeCode),其属性属于xcdatamodel 文件中的id类型。UUID我想通过使用id标准中的此属性从 CoreData 获取此类型的对象NSPredicate,但出现编译错误,提示我必须将其用作ida 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
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激。我似乎到处寻找,却找不到任何答案。现在看来最好的解决方案是将 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
}
Run Code Online (Sandbox Code Playgroud)
就我而言,它适用于以下谓词:
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
}
Run Code Online (Sandbox Code Playgroud)
更重要的是,我正在使用UUID(马丁建议的答案中有同样的情况),而不是ObjectIdentifier. 绝对可以基于 获取项目UUID。
请尝试将函数中的参数类型更改为UUID
| 归档时间: |
|
| 查看次数: |
2801 次 |
| 最近记录: |