0

アンワインドセグエを使うのが大好きですが、問題が発生しました...

子をモーダルに表示する親コントローラー(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()

    })
}

これは機能しますが、間違っているように感じます (詳細コントローラーがホームコントローラーについて知る必要があるのは「悪い」と感じているためだと思います)。より良いアプローチについて何かアドバイスはありますか?

4

1 に答える 1

0

提示されたView ControllerのviewWillDisappear:、または提示しているView ControllerのviewWillAppear:で、グラブself.transitionCoordinatorして呼び出します。ブロックは、アニメーションがnotifyWhenInteractionEndsUsingBlock:終了したときに、完了ブロックが呼び出されるときに呼び出されます。dismissViewController

于 2015-09-03T02:15:41.870 に答える