我有两个几乎相同的功能。这个很好用:
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
调用。
如果这很重要,我正在使用领域通知。
有人有什么主意吗?
感谢您的光临!
答案 0 :(得分:1)
我认为问题可能在于您可能两次调用了actuallyDeleteCurrentAccount()
函数,或者正在从其他地方删除该函数。
另一个原因可能是,在通知令牌上,您假设您的对象存在,但是该对象刚刚被删除。
我建议您使用一些打印件或断点来缩小问题的范围。 您也可以像这样做一些检查
try! realm.write {
thisAccount.invalidated == false {
realm.delete(thisAccount)
}
//otherwise the object is already invalidated
}
然后,您可以使用领域浏览器检查对象是否实际上已删除。