首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用UUID获取核心数据

使用UUID获取核心数据
EN

Stack Overflow用户
提问于 2021-09-07 00:12:40
回答 1查看 1.3K关注 0票数 1

如何使用对象的UUID获取对象?我有一个对象(TimeCode),它的id属性在xcdatamodel文件中具有UUID类型。我想通过在标准CoreData中使用这个id属性从NSPredicate中获取这个类型的对象,但是我收到了一个编译错误,说我必须使用id作为CVarArg。但是在运行时,当我实际调用函数时,程序崩溃了,因为不能将ObjectIdentifier类型转换为CVarArg

以下是完整的代码:

代码语言:javascript
复制
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类代码。

代码语言:javascript
复制
class TimeCodeViewModel: Identifiable {
    var id: ObjectIdentifier
    var fullName = ""
    
    
    init(timeCode: TimeCode) {
        self.id = timeCode.id
        self.fullName = timeCode.fullName!
    }
    
    // class methods
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-07 05:49:52

在我的例子中,它与以下谓词一起工作:

代码语言:javascript
复制
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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69081265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档