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
ます。
これはどのように行うことができますか?