アンワインドセグエを使うのが大好きですが、問題が発生しました...
子をモーダルに表示する親コントローラー(Homeと呼びます)があります( Detailと呼びます)。
詳細コントローラーには、コア データ エンティティのコレクションを表示するテーブルビューがあり、[削除] ボタンがあります。タップすると、これらのエンティティをすべて削除し、モーダルを閉じ、ホーム コントローラーを更新して、エンティティが削除されたことを示します。削除されました。
self.context.deleteObject(entity)
テーブルビューが勢いよくスクロールできる十分なエンティティがあり、テーブルがまだ減速している間に [削除] ボタンがタップされた場合を除いて、アンワインド セグエが続く私の最初の試みはうまくいきました。これはクラッシュを引き起こします:(
私が理解できることから、エンティティを削除したばかりですが、tableview がまだスクロールしているため (終了アニメーションが完了している間)、tableView は (スクロールのために) 表示されようとしているセルをデキューしようとしますが、その後クラッシュします実体がなくなったからです。
モデル ビューが閉じられたときに viewDidAppear が呼び出された場合、そこで Home を更新できます (ただし、呼び出されません)。
アンワインド セグエに、アニメーションが完了したときに呼び出されたクロージャーがあった場合、そこに Home を更新できます (ただし、私が見つけることができる限りではありません)。
したがって、今のところ、手動でdismissViewControllerAnimated
クロージャーを呼び出して使用し、ホームコントローラーを更新しています...
if let nc = self.presentingViewController as? UINavigationController, home = nc.topViewController as? HomeViewController {
self.dismissViewControllerAnimated(true, completion: { _ in
self.model.deleteEntities()
home.refresh()
})
}
これは機能しますが、間違っているように感じます (詳細コントローラーがホームコントローラーについて知る必要があるのは「悪い」と感じているためだと思います)。より良いアプローチについて何かアドバイスはありますか?