web-dev-qa-db-ja.com

書き込みトランザクションの外部でオブジェクトを変更しようとしています-レルムのエラー

最初に、_self.statisticsArray.count == 0_かどうかを確認してから、新しいレコードを作成します。それ以外の場合は、既存の値を更新します。新しいオブジェクトを作成すると、すべて問題ありませんが、既存のオブジェクトを更新しようとすると、次のエラーでクラッシュします。

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

しかし、私はそれをすべて1つの_.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)
        })
     }
}
_
10
John Doe

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

私もそんな問題を抱えていたので、こう決めました。

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