1

popToRootViewController と NavigationControllerDelegate の組み合わせで奇妙なクラッシュが発生しています。Storyboard には 3 つの tableViewControllers が作成されます。RootViewController - secondViewController - ThirdViewController 次に、ThirdViewController で popToRootViewController を実行します。ポッピングは正常に機能しますが、すぐにクラッシュするか、RootView で何か他のものをタップするとクラッシュします。popToRootViewController の直後に NavigationController の childViewControllers が 0 であることがわかりましたが、戻るボタンを 1 つずつポップしてもクラッシュしません。

NavigationController のデリゲートを無効にすると、クラッシュが解決され、childViewControllers は 0 になりません。ただし、ユーザー入力の検証に使用しているテキストフィールドのデリゲートを無効にするには、NavigationController デリゲートが必要です。(つまり、ユーザーが必須テキストフィールドを空のままにした場合、ナビゲーションコントローラーのデリゲートは、ビューをプッシュ/ポップする前にテキストフィールドデリゲートを無効にして、テキストフィールドデリゲートによってアラートビューがトリガーされないようにし、これは正常に機能します)。

childViewControllers カウント = 0 を示す NSLog 出力を次に示します。ビューをポップ/プッシュするときに、childViewControllers の数をカウントしています。

アプリ起動時 (NSLog in viewdDidAppeared)

2013-06-11 13:05:29.287 MyApp[1389:c07] Childviewcontrollers in Root's viewDidAppear = 1
2013-06-11 13:05:29.289 MyApp[1389:c07] Childviewcontrollers in Root's viewDidAppear = (
   "<RootViewController: 0x83239d0>"
)

ルートを 2 番目にプッシュ

2013-06-11 13:05:41.955 MyApp[1389:c07] delegate enabled
2013-06-11 13:05:41.956 MyApp[1389:c07] childviewcontrollers count in SecondViewController's NavControlDelegate 2
2013-06-11 13:05:41.956 MyApp[1389:c07] childviewcontrollers in SecondViewController's NavControlDelegate (
    "<RootViewController: 0x83239d0>",
    "<SecondViewController: 0xfb0ee60>"
)
2013-06-11 13:05:42.322 MyApp[1389:c07] childviewcontrollers count in Second's ViewDidAppear 2
2013-06-11 13:05:42.322 MyApp[1389:c07] childviewcontrollers in Second's ViewDidAppear (
    "<RootViewController: 0x83239d0>",
    "<SecondViewController: 0xfb0ee60>"
)

セカンドからサード

2013-06-11 13:05:51.945 MyApp[1389:c07] childviewcontrollers count in SecondViewController's NavControlDelegate 3
2013-06-11 13:05:51.945 MyApp[1389:c07] childviewcontrollers in SecondViewController's NavControlDelegate (
    "<RootViewController: 0x83239d0>",
    "<SecondViewController: 0xfb0ee60>",
    "<ThirdViewController: 0x832f050>"
)
2013-06-11 13:05:52.302 MyApp[1389:c07] childviewcontrollers count in Third's ViewDidAppear 3
2013-06-11 13:05:52.303 MyApp[1389:c07] childviewcontrollers in Third's ViewDidAppear (
    "<RootViewController: 0x83239d0>",
    "<SecondViewController: 0xfb0ee60>",
    "<ThirdViewController: 0x832f050>"

3 番目の popToRootViewController。

2013-06-11 13:06:02.284 MyApp[1389:c07] Delegate disabled
2013-06-11 13:06:02.284 MyApp[1389:c07] childviewcontrollers in SecondViewController's NavControlDelegate 0
2013-06-11 13:06:02.284 MyApp[1389:c07] childviewcontrollers in SecondViewController's NavControlDelegate (null)

しかし、RootViewController は新しく作成されましたか? でも、いずれ潰れます。

2013-06-11 13:06:02.642 MyApp[1389:c07] Childviewcontrollers in Root's viewDidAppear = 1
2013-06-11 13:06:02.642 MyApp[1389:c07] Childviewcontrollers in Root's viewDidAppear = (
    "<RootViewController: 0x83239d0>"
)

参考までに、navigationController のデリゲートを無効にしたときのログを以下に示します。この問題を解決するためのアドバイスがあれば、非常に感謝しています。

2013-06-11 13:07:06.349 MyApp[1412:c07] Childviewcontrollers count in Root's viewDidAppear = 1
2013-06-11 13:07:06.350 MyApp[1412:c07] Childviewcontrollers in Root's viewDidAppear = (
    "<RootViewController: 0x8184680>"
)
2013-06-11 13:07:08.265 MyApp[1412:c07] delegate enabled
2013-06-11 13:07:08.632 MyApp[1412:c07] childviewcontrollers count in Second's ViewDidAppear 2
2013-06-11 13:07:08.632 MyApp[1412:c07] childviewcontrollers in Second's ViewDidAppear (
    "<RootViewController: 0x8184680>",
    "<SecondViewController: 0xa969ca0>"
)
2013-06-11 13:07:15.442 MyApp[1412:c07] childviewcontrollers count in Third's ViewDidAppear 3
2013-06-11 13:07:15.443 MyApp[1412:c07] childviewcontrollers in Third's ViewDidAppear (
    "<RootViewController: 0x8184680>",
    "<SecondViewController: 0xa969ca0>",
    "<ThirdViewController: 0x74a6a30>"
)
2013-06-11 13:07:18.994 MyApp[1412:c07] Childviewcontrollers count in Root's viewDidAppear = 1
2013-06-11 13:07:18.994 MyApp[1412:c07] Childviewcontrollers in Root's viewDidAppear = (
    "<RootViewController: 0x8184680>"
)

よろしく、

4

0 に答える 0