使用UUID获取核心数据

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)

Vik*_*lov 6

就我而言,它适用于以下谓词:

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