有没有办法防止在SwiftData中插入重复对象?

hwamh0ep  于 2023-09-30  发布在  Swift
关注(0)|答案(1)|浏览(151)

在没有CoreData背景的情况下,我在一个应用程序中尝试SwiftData,并不断遇到错误:
对ID为PersistentIdentifier(...)的对象进行重复注册尝试
在阅读文档时,我看到了PersistenceModelID的存在,但我不明白如何使用它。我试图从一些旧的CoreData实现中推断如何防止对象具有重复的UUID,并得到以下不起作用的结果:

let skinData = skinDataResponse.data // an array of objects

for skin in skinData {
    var fetchDescriptor = FetchDescriptor<Skin>()
    fetchDescriptor.predicate = #Predicate { item in
        skin.displayName == item.displayName
        // skin.id == item.PersistenModelID <- Tried these unsuccessfully as well
        // skin.id == item.id // UUID comparison
    }
    
    do {
        let existingSkin = try self.modelContext?.fetch(fetchDescriptor)
        
        if existingSkin?.first == nil {
            self.modelContext?.insert(skin)
        }
    } catch {
        print("SwiftData Error: \(error)")
    }
}
tct7dpnv

tct7dpnv1#

如果您将id标记为.unique,并将autosaveEnabled保留为默认值true;你不必担心重复。

@Attribute(.unique) var id: UUID = UUID()

insert方法适用于创建和更新模型示例,因为模型指示code参数是唯一的。
https://developer.apple.com/documentation/swiftdata/maintaining-a-local-copy-of-server-data

相关问题