尝试在写入事务之外修改对象 - Realm中的错误

问题描述 投票:7回答:2

首先,我正在检查是否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
2个回答
16
投票

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)
     })
}

1
投票

我也有这样的问题,我决定这样。

let model = RealmModel()
model.realm?.beginWrite()
model.property = someValue
do {
    try model.realm?.commitWrite()
} catch {
    print(error.localizedDescription)
}
© www.soinside.com 2019 - 2024. All rights reserved.