RealmSwift RLMException

RealmSwift RLMException,第1张

概述我正在为我的项目使用Realm Swift.但是,我不确定如何解决以下问题: RMLException: Attempting to modify object outside of a write transaction – call beginWriteTransaction on an RLMRealm instance first 抛出. 有人知道吗? import RealmSwift 我正在为我的项目使用Realm Swift.但是,我不确定如何解决以下问题:

rmlException: Attempting to modify object outsIDe of a write transaction – call beginWriteTransaction on an RLMRealm instance first

抛出.

有人知道吗?

import RealmSwiftfunc createOrUpdateMachineInRealm(machine: Machine){    let priority = disPATCH_QUEUE_PRIORITY_DEFAulT    dispatch_async(dispatch_get_global_queue(priority,0)) {        // do some task        let realm = Realm()        realm.beginWrite()        realm.write{            realm.add(machine,update: true)        }        realm.commitWrite()        dispatch_async(dispatch_get_main_queue()) {            // update some UI            actionDelegate?.operationCompleted(true)        }    }}

解决方案:我也传入了机器的参数并将它们分配给realm.write()中的机器

func createOrUpdateMachineInRealm(machine: Machine,name: String){    let priority = disPATCH_QUEUE_PRIORITY_DEFAulT    dispatch_async(dispatch_get_global_queue(priority,0)) {        // do some task        let realm = Realm()        realm.write{            machine.name = name            realm.add(machine,update: true)        }     } }
我和你一样有同样的问题和例外.虽然 Nate Mann的答案不是问题的解决方案,但它引导我朝着正确的方向前进.

您无法修改先前从数据库中取出的Realm对象,因为Realm将尝试更新它并在其他队列上(无论出于何种原因)抛出错误.

因此,您必须在realm.write {}语句中进行所有修改,或者使用相同的主键创建新对象,以便正确更新.这也意味着您无法创建或更新一个函数,但需要两个单独的函数.

您的更新功能必须如下所示:

func updateMachineInRealm(machine: Machine){    var updatedMachine = Machine()    updatedMachine.name = machine.name    updatedMachine.value = machine.value + 42    updatedMachine.primaryKey = machine.primaryKey    // "transfer" or modify all the values of the old machine object    let realm = try! Realm()    do {        try realm.write() {        realm.add(updatedMachine,update: true)    }}

请记住,您需要一个唯一的主键才能使用此代码,因为Realm将在数据库中匹配您的新对象.

此外,当使用多个线程访问Realm对象等更大的项目时,这当然有缺点.但它适用于小项目(就像我正在努力,你似乎正在努力).

总结

以上是内存溢出为你收集整理的RealmSwift RLMException全部内容,希望文章能够帮你解决RealmSwift RLMException所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1033160.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-24
下一篇2022-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存