gpt4 book ai didi

ios - 使用 Realm 为新属性赋值时发生崩溃

转载 作者:行者123 更新时间:2023-11-30 11:03:58 24 4
gpt4 key购买 nike

我基本上想在执行操作时增加一个值。所以我要做的是,当第一次执行该操作时,我将值 1 分配给 Realm 中的一个新属性,然后将其添加到 Realm 数据库中。

第二次执行该操作时,将从属性中的所有值中获取最大值,并将该最大值增加 1,然后添加到数据库中。

但是发生的事情是第一次,当我到达 realm.add(chatMsgObj) 行时,发生崩溃,提示 Can only add, remove, or create objects in a Realm in写入事务 - 首先在 RLMRealm 实例上调用 beginWriteTransaction。

这是代码..

func incrementID() -> Int {

let realm = try! Realm()
var myvalue = realm.objects(ChatMessage.self).map{$0.mainId}.max() ?? 1
myvalue = myvalue + 1
chatMsgObj.mainId = myvalue
realm.add(chatMsgObj) //CRASH HERE

return myvalue

}

最佳答案

Can only add, remove, or create objects in a Realm in a write transaction - call beginWriteTransaction on an RLMRealm instance first.

您需要打开 Realm 然后写入。

了解有关 Realm 的更多信息 here ,并且此代码现在应该适合您。

try! realm.write {
realm.add(chatMsgObj)
}

编辑:从下面的评论中您遇到了另一个问题:在同一个主键上写入,请查看 Realm again 的文档,但这可能是配置问题,

您可以尝试从正在测试的(模拟器/设备)中删除该应用程序,然后再次重新运行该应用程序。

你来了一个十字架

Attempting to create an object of type 'ChatMessage' with an existing primary key value '0'

因此,对于这次新的崩溃,您有两个选择。

1-更改正在写入的新对象的PrimaryKey

2- 获取该PrimaryKey 的对象并修改它。

现在对于获取和修改部分,看一下这段代码你应该有一个想法。

let realm = try! Realm()
let myChatObject = realm.objects(Dog.self).filter("youPrimaryKey == 1").first
try! realm.write {
myChatObject!.something = newValue
}

关于ios - 使用 Realm 为新属性赋值时发生崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52962664/

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