0

以下のように、提示されたViewControllerをコールバックコードブロックから削除しようとしました。

MyBViewController *bvc = [[MyBViewController alloc] init];

bvc.callBack = ^(void){
   NSLog(@"Dismiss");
   [self dismissViewControllerAnimated:YES completion:Nil];
};

ただし、EXC_BAD_ACCESS例外がスローされています。例外スタックでは、[MyBViewControllerコールバック]にあるようです。

1.0秒後に起動する別のローカルメソッドを呼び出して却下しようとしました。しかし、同じエラーが発生しました。

このようなコールバックブロックを介して却下することはできませんか?教えてください。

ありがとう。

4

3 に答える 3

0

bvc の割り当てが解除されたときに、おそらくコールバックが呼び出されていると思います。

コードの残りの部分を見ることなく、 bvc が割り当てられている関数が完了した後にコールバック関数が呼び出され、ARC がおそらくそれをクリーンアップすると仮定しています。次に、割り当てが解除されたオブジェクトでコールバックが発生し、EXC_BAD_ACCESS を取得する方法です。bvc をプロパティまたは iVar にして、早期に終了しないようにする必要があります。

于 2013-01-25T17:28:20.567 に答える
0

developer.apple.com が言うように:「提示ビュー コントローラーは、提示されたビュー コントローラーを閉じる責任があります。ただし、提示されたビュー コントローラー自体でこのメソッドを呼び出すと、メッセージが提示ビュー コントローラーに自動的に転送されます。」ブロックを使用せず[self dismissViewControllerAnimated:YES completion:Nil];に内部を使用できます。MyBViewControllerこれがあなたを助けることを願っています。

于 2013-01-25T17:33:06.600 に答える
0

最後に私はそれを理解しました。MyBViewController に「割り当て」としてコールバック プロパティがありました。「コピー」に変更することで修正しました。その後、うまくいきました。

于 2013-01-26T02:36:17.983 に答える