4

以下のコードは、iOS 4 および 5 では問題なく動作しますが、iOS 6 ではクラッシュしEXC_BAD_ACCESSます。トラブルシューティングの助けになれば幸いです。このコードはUITableViewController、アプリの検索ロジックを処理する で呼び出されています。

CATransition *transition = [CATransition animation];
transition.duration = 0.3f;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
transition.type = kCATransitionFade;

[self.navigationController.view.layer addAnimation:transition forKey:nil];
[self.navigationController popViewControllerAnimated:NO];

を追加する方法tableViewは似ており、呼び出されてもクラッシュしません。

SearchTVC *searchTable = [[SearchTVC alloc] init];
searchTable.detailViewController = self.detailViewController;

CATransition *transition = [CATransition animation];
transition.duration = 0.3f;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
transition.type = kCATransitionFade;

[self.navigationController.view.layer addAnimation:transition forKey:nil];
[self.navigationController pushViewController:searchTable animated:NO];

何が問題なのですか?

*編集

[self.navigationController popViewControllerAnimated:YES];興味深いことに、 (YESではなく)を使用するとクラッシュは発生しませんNO。しかしもちろん、これはカスタム ポップ アニメーションを使用する目的に反します。

4

3 に答える 3

7

ビュー コントローラ コードのどこかに次のような行があるかどうかを確認します。

self.navigationController.delegate=self; 

もしそうなら、あなたはそれを元に戻す必要があります

self.navigationController.delegate=nil;

あなたが言う前に

[self.navigationController popViewControllerAnimated:YES]; 

それ以外の場合は、popViewControllerAnimatedまずデリゲートの割り当てを解除してから呼び出しを試みます。その結果、クラッシュが発生します。

于 2013-08-06T21:44:59.627 に答える
3

私の質問が漠然としていたことは承知していますが、それ以上のことはありませんでした。行に問題があることはわかっていました[self.navigationController popViewControllerAnimated:NO];が、その理由はわかりませんでした。それから私はこの質問に出くわし、最初の答えは、検索テーブルを提示するたびに新しいものを作成するのではなく、インスタンス変数にすることを提案し、それは実際に機能しました。頭を包むことができないのはメモリの問題に違いありません。

tl;dr :

UIViewControllerプッシュおよびポップされている がインスタンス変数であることを確認してください。

于 2012-09-25T13:16:02.263 に答える