2016-02-17 2 views
4

Сначала я проверяю, self.statisticsArray.count == 0, тогда я создаю новую запись, иначе я обновляю существующее значение. Когда я создаю новый объект, все в порядке, но когда я пытаюсь обновить существует, то он падает со следующей ошибкой:Попытка изменить объект за пределами транзакции записи - ошибка в Realm

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

ответ

10

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

Нет, это не решение. Он все еще падает. И почему это не должно? 'self.statistics.mlSummary = 250' - это просто переменная класса. –

+0

Если свойство 'statistics' является объектом Realm, которое было добавлено в Realm, тогда в любой транзакции записи должно быть выполнено редактирование любых его свойств. Просто потому, что это свойство 'self' не меняет этого. –

+0

@AdamFish, помещая 'self.statistics.summary = 250' в блок' write', не помогает. Что вы мне посоветуете? –

Смежные вопросы