gpt4 book ai didi

ios - 将现有对象附加到 Realm 列表

转载 作者:搜寻专家 更新时间:2023-10-30 22:32:45 25 4
gpt4 key购买 nike

我的代码中有带主键的 CatalogItem 对象。Realm 在写入以下代码时抛出错误:

class CartItem: Object {
dynamic var id: Int = 0
dynamic var item: CatalogItem!
dynamic var amount: Int = 0

convenience required init(id: Int, item: CatalogItem, amount: Int) {
self.init()
self.id = id
self.item = item
self.amount = amount
}
}

class Cart: Object {

var items = List<CartItem>()

func addItem(item: CatalogItem) {
let realm = try! Realm()
let newItem = CartItem(id: item.id, item: item, amount: 1)
do {
try realm.write {
items.append(newItem)
}
} catch let e {
handleError(e)
}
}
}

错误:

'RLMException', reason: 'Can't set primary key property 'id' to existing value '352'.'

我希望 Realm 引用现有的 CatalogItem 但看起来它正在尝试添加另一个。有没有办法实现这种关系?注意:所有对象都存储在一个 Realm 中。

最佳答案

如果将非托管 Realm 对象附加到托管 List,则将创建该非托管对象。但是,使用现有主键创建对象是错误的。您可以使用 Realm.add(_:update: true)指定您要创建对象(如果它不存在),否则使用您传入的新值更新现有对象的属性。

所以我认为您希望您的 addItem() 函数看起来像这样:

func addItem(item: CatalogItem) {
let realm = try! Realm()
let newItem = CartItem(id: item.id, item: item, amount: 1)
do {
try realm.write {
realm.add(newItem, update: true)
items.append(newItem)
}
} catch let e {
handleError(e)
}
}

关于ios - 将现有对象附加到 Realm 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38789979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com