ストーリーボードから構築されたナビゲーションコントローラーを備えたアプリがあります。各ViewControllerには、ユーザーが次のビューに戻るたびに更新する必要があるテーブルがあるため、ユーザーがView Controller A-> B-> Cのようになったら、BIに戻ったときに更新する必要があるとします。ビューBのテーブルの値。
UINavigationControllerDelegateを使用してこれを実行しようとしているので、ユーザーがナビゲーションを行ったり来たりするたびにdidShowViewControllerが呼び出されます。
- (void) navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
// Do some initialization stuff
// and then get entries from an external database
[self fetchEntries];
// Log:
NSLog(@"View-B: \nself=%@ \nnavigationController=%@\nDelegate:%@\nviewControllers:%@", self, self.navigationController, self.navigationController.delegate, self.navigationController.viewControllers);
}
viewDidLoadにデリゲートを設定しました。
- (void)viewDidLoad
{
[super viewDidLoad];
// Sets the delegate for Navigation Controller
[self.navigationController setDelegate:self];
}
問題は、何らかの理由で、navigationControllerがどこかでNULLに設定されていて、明示的なプッシュ/ポップ操作を行っていないため、どこにあるかがわからないことです(ナビゲーションコントローラーはストーリーボードに組み込まれていると述べました)。
正確なシーケンスは次のとおりです。A->B->C-> Bここで、navigationControllerはNULLです。NSLogの出力は次のとおりです。
1)ユーザーがA->Bから移動した場合
2012-10-07 14:50:28.170 MyApp[35765:207] View-B:
self=<View-B: 0x6a660b0>
navigationController=<UINavigationController: 0x6823b20>
Delegate:<View-B: 0x6a660b0>
viewControllers:(
"<View-A: 0x6879e90>",
"<View-B: 0x6a660b0>"
)
2)B-> C
2012-10-07 14:50:31.371 MyApp[35765:207] View-C:
self=<View-C: 0x6a69a10>
navigationController=<UINavigationController: 0x6823b20>
Delegate:<View-C: 0x6a69a10>
viewControllers:(
"<View-A: 0x6879e90>",
"<View-B: 0x6a660b0>",
"<View-C: 0x6a69a10>"
)
3)そしてC-> B
2012-10-07 14:50:37.027 MyApp[35765:207] View-C:
self=<View-C: 0x6a69a10>
navigationController=(null)
Delegate:(null)
viewControllers:(null)
ここでnavigationControllerがNULLになる理由がよくわかりません。viewDidLoadでデリゲートを設定すると、問題が発生することがわかりました。その行を削除し、プロトコルプロシージャ(didShowViewController)からviewDidLoadにコードを移動すると、ユーザーがナビゲーションスタックに戻ったときにテーブルを更新できないことを除いて、すべてが正常に機能します。
また、ステップ(3)で、didShowViewControllerがView-BからではなくView-Cから呼び出されていることも奇妙です。
どんな助けでも大歓迎です。