最初に、_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)
})
}
}
_
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)
})
}
私もそんな問題を抱えていたので、こう決めました。
let model = RealmModel()
model.realm?.beginWrite()
model.property = someValue
do {
try model.realm?.commitWrite()
} catch {
print(error.localizedDescription)
}