删除Realm对象会导致一个功能崩溃,而不是另一个功能崩溃

时间:2018-09-10 00:04:46

标签: ios swift realm

我有两个几乎相同的功能。这个很好用:

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.'

第二 func仅从域中删除self.currentAccount,而第一则删除域中的所有内容。领域,包括 self.currentAccount。两个func位于同一视图控制器class中,并且都从同一class调用。

如果这很重要,我正在使用领域通知。

有人有什么主意吗?

感谢您的光临!

1 个答案:

答案 0 :(得分:1)

我认为问题可能在于您可能两次调用了actuallyDeleteCurrentAccount()函数,或者正在从其他地方删除该函数。

另一个原因可能是,在通知令牌上,您假设您的对象存在,但是该对象刚刚被删除。

我建议您使用一些打印件或断点来缩小问题的范围。 您也可以像这样做一些检查

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

然后,您可以使用领域浏览器检查对象是否实际上已删除。