ここで間違っていることを理解しようとしています。レルム内のオブジェクトを削除してテーブルビューを同期させておく
tableViewとdetailViewの2つの基本的なviewControllerがあります。
データが変更された場合、tableViewをリロードするための通知を購読しています。 detailViewControllerからレコードを変更でき、変更が反映されます。 tableViewからレコードを削除しても機能します。
しかし、detailViewに削除ボタンを追加することもできますが、viewControllerとRealmが同期しなくなりクラッシュします。 'RLMException'、理由: 'オブジェクトが削除または無効化されました。'次回にアプリを読み込むと、レコードが削除され、機能します。
別のviewControllerでオブジェクトを削除し、tablieViewコントローラを更新したままにするにはどうすればよいですか?
class TableViewController: UITableViewController {
var token:NotificationToken?
var expenses: Results<Expense> {
get {
let realm = try! Realm()
return realm.objects(Expense.self)
}
override func viewDidLoad() {
super.viewDidLoad()
let realm = try! Realm()
token = realm.addNotificationBlock { [weak self] notification, realm in
DispatchQueue.main.async {
self?.tableView.reloadData()
}
}
}
class DetailViewController {
func deleteButtonTapped() {
let realm = try! Realm()
if let expense = self.expense {
try! realm.write {
realm.delete(expense)
}
// crashes during load
performSegue(withIdentifier: "unwindToExpensesTable", sender: self)
}
}
あなたは 'DetailViewController'に' expenses'への参照を保持していますか?オブジェクトを削除した後は、オブジェクトへの参照をすべて削除してください。 – jervine10
jervine10、あなたは男です!クラッシュするtableViewControllerではなく、参照を保持しているのでdetailViewです。あなたが答えとしてコメントを書くなら、私はあなたにこのクレジットを与えることができます。 :-) – jannej