2

BViewController を A から適切にプッシュしています。B には、viewDidLoad 時にページの読み込みを開始する webview が含まれています。B を A にポップすると、奇妙な動作が発生します。

  1. webview がロードを終了し、popViewController (ツールバー ボタンの touchUpInside の場合の IBAction) を実行すると、A にポップされて、すべてが完全に機能します。
  2. ただし、webview の読み込みが終了する直前に popViewController を実行すると、exc_bad_access が原因でアプリがクラッシュします。なぜ?ビューはすでにロードされています!

ナビゲーション スタック上にある両方の状況のビュー コントローラーをチェックしました。どちらの場合も同じ結果、2 つの同じオブジェクト、違いはありません!

-(IBAction)goBackOrg:(id)sender{

    NSArray *viewControllers = self.navigationController.viewControllers;

    [[self navigationController]  popViewControllerAnimated:NO];

}

以前にそれをプッシュするために、私は使用しています

if(!self.BController){

            self.BController = [[BViewController alloc] initWithNibName:@"BViewController" bundle:nil anUrlDest:urlSocial];
        }

    [[self navigationController] pushViewController:self.BController animated:NO];
4

2 に答える 2

1

EXC_BAD_ACCESS は、割り当てが解除されたオブジェクトにアクセスしようとすると発生します。

したがって、次のことが問題になる可能性があります。ViewController B をポップすると、アンロードされます。ViewController B がアンロードされた後に Web ビューの読み込みが完了すると、ViewController またはそのビュー (または同様のもの) で何かを実行しようとするコールバック コードが実行されます。

于 2012-11-28T14:26:28.993 に答える
0

WebViewをロードしていてThread、スレッドを使用している場合、UIで変更を行うことはできません。そうしないと、アプリがクラッシュします。

したがって、このタスクはmainThreadで実行してください。

于 2012-11-28T14:38:18.613 に答える