0

所以上下文是我创建了一个领域对象并给它的一个变量一个值,为此我继续调用这个对象的一个​​实例,然后我连接到我的服务器,获取一些值,然后说类似

    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 中的错误是错误:执行被中断,原因:断点 1.2。除非我为所有异常设置断点,否则错误不会显示。

还要注意,代码确实编译,运行,不会导致崩溃(但只是......不要从该特定行开始运行任何代码。 someObject 确实被保存和创建,但是要简单分配的字段没有被分配,等等

4

2 回答 2

0

经过一番测试,原来这是因为领域对象已经保存到领域,其中查询块是异步的,它试图写入已经添加的对象的变量。

似乎错误只是这样,因为我试图编辑的是对象的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
        }
        ...
    })
于 2015-11-03T12:17:22.007 回答
0

如果您尝试编辑已保存对象的主键,那么您将遇到一个断言。Realm 中的主键是不可变的。根据您对用例的确切需求,您可能希望创建对象类的新实例并分配应保存的所有新属性。您可以添加这个新对象,然后在写入事务中使用-createOrUpdateInRealm:withValue:. 注意:注意一对一关系和其他可为空的属性,因为这里的合并策略是覆盖空值。

于 2015-11-03T20:15:43.203 回答