- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在为我的项目使用 RealmSwift
。但是,我不确定如何解决以下问题:
RMLException
: Attempting to modify object outside of a write transaction - callbeginWriteTransaction
on anRLMRealm
instance first
抛出。
有人知道吗?
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 对象等的较大项目时,这当然有缺点。但它适用于小型项目(就像我正在处理,你似乎正在处理)。
关于swift - RealmSwift RLM异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30756349/
我在 R 中有这两个列表: y=c(420.5568, 693.6305, 420.5568, 946.9677, 499.1046, 946.9677) x=c(32, 29, 32, 27, 31
ggplot(data, aes(x, y))+ geom_point(na.rm=T)+ geom_smooth(method="rlm", se=T) 错误消息:stat_smooth() 中
是否有任何可能的方法从 MASS::rlm 中实现的稳健回归中获得 95% CI 的回归系数? # libraries needed library(MASS) library(stats) libr
是否有任何可能的方法从 MASS::rlm 中实现的稳健回归中获得 95% CI 的回归系数? # libraries needed library(MASS) library(stats) libr
我刚开始使用 Realm 数据库。我查看了 Realm 文档,发现了一个 RLMObject 类方法属性属性: 我不明白它在做什么。 你能解释一下我什么时候可以并且需要使用它吗? 谢谢你的帮助。 最佳
我正在使用 MASS 的 rlm 函数来执行稳健的回归。与 lm 不同,summary 函数不返回 r 平方的值。 因此使用 1 - sum(residual^2)/(sum((Y-mean(Y))^
我正在使用 Realm for swift 3.1 并通过 import RealmSwift 和 导入它 导入 Realm 。当我在我的 swift 代码中执行此行时,出现此错误 let realm
我有一个用 Objective-C 编写的旧项目。需要迁移到 Realm。 我从 RLMObject 继承了几个对象/类。当我仅使用一种主要对象类型 (ConnectionRealm) 获取对象时 -
我有一个简单的对象: class MyObject : Object { dynamic var dummyField: String!; } 和另一个继承自 MyObject 的对象: cl
在衡量拟合优度时,R 平方似乎是“简单”线性模型的一种普遍理解(和接受)的衡量方法。但如果是 statsmodels(以及其他统计软件)RLM不包括 R 平方和回归结果。有没有一种方法可以“手动”计算
函数 rlm (MASS) 允许对稳健回归进行 M 和 MM 估计。我想在ggplot2中绘制MM稳健回归的平滑度,但是我认为在stat_smooth中选择method =“rlm”时,自动选择的估计
我正在使用 Reprise RLM 许可证管理器研究互联网激活。我不知道如何使用 C# 将许可证文件从网络服务器获取到文本文件中(我对 C# 也很陌生)。 RLM 附带了一个 C++ 示例,但我无法翻
using System; namespace UnicodeRlm { class Program { static void Main(string[] args)
我在使用 Swift 4 编译的 iOS 上的 Realm 遇到了这个问题,应用程序在启动时崩溃并显示以下消息 RLMException', reason: 'Primary key property
我是一名优秀的程序员,十分优秀!