0

ViewController に UIAlertViewDelegate を実装し、モデルにはデリゲートを ViewController のインスタンスである self.delegate に設定して UIAlertView を作成するメソッドがあります。次に、(モデル内で)次のように willPresentAlertView を呼び出そうとします:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Invalid operation"
            message:@"Cannot divide by 0!"
            delegate:self.delegate
            cancelButtonTitle:@"Cancel"
            otherButtonTitles:@"Undo division",nil];
[self.delegate willPresentAlertView:alert];

willPresentAlertView は、次のように ViewController に実装されます。

- (void)willPresentAlertView:(UIAlertView *)alertView
{
    [alertView show];
}

を呼び出すと、エラーThread 1:EXC_BAD_ACCESS (code=2,adress=0xbf7fff6c)が表示され[alert show]ます。

デリゲートをnilまたはセルフに設定すると正常に動作しますが、アラートのボタンを押したときに呼び出したいのですがalertView:alertView clickedButtonAtIndex:buttonIndex、デリゲートをnilまたはセルフに設定すると機能しません。ViewController のみがこれらのメソッドを実装します。なぜそれが self.delegate である必要があるのでしょうか?

モデルでアラートを呼び出したいのですが、ViewController で などのアラート メソッドを処理する必要がありalertView:alertView clickedButtonAtIndex:buttonIndexます。

これはどのように行うことができますか?

4

1 に答える 1