RealmSwift RLMException
发布时间:2020-12-14 05:27:45 所属栏目:百科 来源:网络整理
导读:我正在为我的项目使用Realm Swift.但是,我不确定如何解决以下问题: RMLException : Attempting to modify object outside of a write transaction – call beginWriteTransaction on an RLMRealm instance first 抛出. 有人知道吗? import RealmSwiftfunc
我正在为我的项目使用Realm
Swift.但是,我不确定如何解决以下问题:
抛出. 有人知道吗? import RealmSwift func 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对象等更大的项目时,这当然有缺点.但它适用于小项目(就像我正在努力,你似乎正在努力). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- c – 当icqdesktop出错时如何编辑make文件(make:*** [all]
- React-Native(二)引入项目,在windows上运行已有的Demo for
- .net – 用于Oracle.ODP的LINQ to SQL
- postgresql – 安装Postgres.app但它不会工作
- Swift UIImageView 构造方法
- 关东升的《从零开始学Swift》3月9日已经上架
- cv::CascadeClassifier类在多次读取新版本xml模型时的错误及
- reactjs – 根据用户角色隐藏一些React组件子项
- 在react中使用vuex的示例代码
- 详解vue移动端项目的适配(以mint-ui为例)