error: execution was interrupted, reason: breakpoint 1.2. Xcode 7.1, Swift
error: execution was interrupted, reason: breakpoint 1.2. Xcode 7.1, Swift
上下文是我创建了一个领域对象并为其中一个变量赋值,为此我继续调用该对象的一个实例,然后连接到我的服务器,获取一些值,然后说
let someObject = someObjectClass() //this being a realm object class
someQuerySuccessBlock { (success, error) -> void in
...
if let someValue = objects[0].value {
someObject.id = someValue //this line is where the issue is
}
...
})
let realm = RLMRealm.defaultRealm()
realm.beginWriteTransaction
realm.addObject(someObject)
realm.commitWriteTransaction
llvm报错是error: execution was interrupted, reason: breakpoint 1.2.
除非我为所有异常设置断点,否则不会显示错误。
另请注意,代码确实可以编译,运行,不会导致崩溃(但只是......不会 运行 从该特定行开始的任何代码。那个 someObject 确实得到已保存并创建,但要分配的字段根本没有分配,等等
经过一些测试,发现这是因为领域对象已经保存到 Realm 中,因为查询块是异步的,它试图写入一个已经添加的对象的变量。
好像错误只是因为我试图编辑的是对象的primaryKey?
我的修复:
let someObject = someObjectClass() //this being a realm object class
someQuerySuccessBlock { (success, error) -> void in
...
if let someValue = objects[0].value {
someObject.id = someValue //this line is where the issue is
let realm = RLMRealm.defaultRealm()
realm.beginWriteTransaction
realm.addObject(someObject)
realm.commitWriteTransaction
}
...
})
如果您尝试编辑已保存对象的主键,那么您将遇到一个断言。 Realm 中的主键是不可变的。根据您对用例的确切需求,您可能希望创建对象的新实例 class 并分配应保存的所有新属性。然后,您可以使用 -createOrUpdateInRealm:withValue:
在写入事务中添加此新对象。注意:注意一对一关系和其他可为空的属性,因为此处的合并策略会覆盖空值。
上下文是我创建了一个领域对象并为其中一个变量赋值,为此我继续调用该对象的一个实例,然后连接到我的服务器,获取一些值,然后说
let someObject = someObjectClass() //this being a realm object class
someQuerySuccessBlock { (success, error) -> void in
...
if let someValue = objects[0].value {
someObject.id = someValue //this line is where the issue is
}
...
})
let realm = RLMRealm.defaultRealm()
realm.beginWriteTransaction
realm.addObject(someObject)
realm.commitWriteTransaction
llvm报错是error: execution was interrupted, reason: breakpoint 1.2. 除非我为所有异常设置断点,否则不会显示错误。
另请注意,代码确实可以编译,运行,不会导致崩溃(但只是......不会 运行 从该特定行开始的任何代码。那个 someObject 确实得到已保存并创建,但要分配的字段根本没有分配,等等
经过一些测试,发现这是因为领域对象已经保存到 Realm 中,因为查询块是异步的,它试图写入一个已经添加的对象的变量。
好像错误只是因为我试图编辑的是对象的primaryKey?
我的修复:
let someObject = someObjectClass() //this being a realm object class
someQuerySuccessBlock { (success, error) -> void in
...
if let someValue = objects[0].value {
someObject.id = someValue //this line is where the issue is
let realm = RLMRealm.defaultRealm()
realm.beginWriteTransaction
realm.addObject(someObject)
realm.commitWriteTransaction
}
...
})
如果您尝试编辑已保存对象的主键,那么您将遇到一个断言。 Realm 中的主键是不可变的。根据您对用例的确切需求,您可能希望创建对象的新实例 class 并分配应保存的所有新属性。然后,您可以使用 -createOrUpdateInRealm:withValue:
在写入事务中添加此新对象。注意:注意一对一关系和其他可为空的属性,因为此处的合并策略会覆盖空值。