【问题标题】:Attempting to modify object outside of a write transaction - error in Realm尝试在写事务之外修改对象 - 领域中的错误
【发布时间】:2016-02-17 16:36:31
【问题描述】:

首先,我检查self.statisticsArray.count == 0 是否创建新记录,否则我将更新现有值。当我创建一个新对象时,一切正常,但是当我尝试更新现有对象时,它会崩溃并出现下一个错误:

Attempting to modify object outside of a write transaction - call beginWriteTransaction on an RLMRealm instance first

但是我在一个.write 块中完成了所有操作,为什么会出现这样的错误?我读到如果我使用.write(),那么我不需要关闭事务。谁能描述一下它为什么会崩溃?

if self.statisticsArray.count == 0 {
     self.statistics.summary = 250

     try! self.realm.write({
         self.realm.add(self.statistics)
         self.realm.add(record)
     })
 } else {
     if day == self.statisticsArray.last?.date {
         try! self.realm.write({
             self.realm.objects(Statistics).last?.summary += 250
             self.realm.add(record)
         })
     } else {
        try! self.realm.write({
             self.statistics.summary = (self.statisticsArray.last?.summary)! + 250
             self.realm.add(self.statistics)
             self.realm.add(record)
        })
     }
}

【问题讨论】:

    标签: ios swift realm


    【解决方案1】:

    self.statistics.summary = 250 需要在写事务中。它应该是这样的:

    if self.statisticsArray.count == 0 {
    
         try! self.realm.write({
             self.statistics.summary = 250
             self.realm.add(self.statistics)
             self.realm.add(record)
         })
    }
    

    【讨论】:

    • 不,这不是解决方案。它仍然崩溃。为什么不应该呢? self.statistics.mlSummary = 250 只是一个类变量。
    • 如果statistics 属性是已添加到领域的领域对象,则编辑其任何属性都需要在写入事务中进行。仅仅因为它是self 的属性并不会改变这一点。
    • @AdamFish 将 self.statistics.summary = 250 放入 write 块没有帮助。你有什么建议?
    • 您应该打开异常断点,以便调试器可以暂停执行异常,并且您可以找出错误发生在哪一行代码。您粘贴的代码似乎没有任何据我所知,其他问题。
    【解决方案2】:

    我也遇到过这样的问题,就这样决定了。

    let model = RealmModel()
    model.realm?.beginWrite()
    model.property = someValue
    do {
        try model.realm?.commitWrite()
    } catch {
        print(error.localizedDescription)
    }
    

    【讨论】:

    • 请为您的回答添加更多解释
    • 自己解释清楚了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多