Удаление объекта Realm приводит к сбою в одной функции, а не в другой - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть две почти идентичные функции. Этот работает нормально:

func deleteEveryDamnThing(){
    let allAccounts = realm.objects(Account.self)
    let allTransactions = realm.objects(Transaction.self)

    try! realm.write {
        realm.delete(allAccounts)
        realm.delete(allTransactions)
    }
    self.activeAcctLabel.text = "No Active Account"
    self.currentBalLabel.text = "$0.00"
    self.highBalLabel.text = "$0.00"
    self.balBarTopConstraint.constant = 505
    self.balanceBar.backgroundColor = UIColor.red
    self.currentBalLabel.textColor = UIColor.red
    self.littleDash.backgroundColor = UIColor.red
    self.popNoActiveAccountAlert()
}

Однако вот этот:

func actuallyDeleteCurrentAccount(){
    let thisAccount = self.currentAccount

    try! realm.write {
        realm.delete(thisAccount)
    }
    self.activeAcctLabel.text = "No Active Account"
    self.currentBalLabel.text = "$0.00"
    self.highBalLabel.text = "$0.00"
    self.balBarTopConstraint.constant = 505
    self.balanceBar.backgroundColor = UIColor.red
    self.currentBalLabel.textColor = UIColor.red
    self.littleDash.backgroundColor = UIColor.red
    self.popNoActiveAccountAlert()
}

вылетает с объяснением:

Terminating app due to uncaught exception 'RLMException', reason: 'Object has been deleted or invalidated.'

second func удаляет только self.currentAccount из Царства, в то время как first удаляет все в Царстве, , включая self.currentAccount. Оба func находятся в одном контроллере вида class и оба вызываются из одного class.

Я использую уведомления Realm, если это имеет значение.

У кого-нибудь есть идеи?

Спасибо за внимание!

1 Ответ

0 голосов
/ 10 сентября 2018

Я думаю, что проблема может заключаться в том, что вы, возможно, вызываете функцию actuallyDeleteCurrentAccount() дважды или она стирается откуда-то еще.

Другая причина может заключаться в том, что в своем маркере уведомления вы предполагаете, что ваш объект существует, но объект только что был удален.

Я рекомендую вам использовать некоторые отпечатки или точки останова, чтобы сузить проблему. Также вы можете сделать некоторые проверки, как это

    try! realm.write {
        thisAccount.invalidated == false {
            realm.delete(thisAccount)
        }
        //otherwise the object is already invalidated
    }

Затем вы можете использовать браузер областей, чтобы проверить, действительно ли объект удален.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...