UIAlertView を作成しているオブジェクトがデリゲートにメッセージを送り返しているのに、デリゲート オブジェクトがクラッシュするという問題があります。
他のいくつかのインスタンスでは問題なく動作していますが、この場合 (および他の同様の質問と異なる点) でやろうとしていることは、アラートをインスタンス化し、そのデリゲートとして機能するオブジェクトがそれ自体はビューではなく、ビュー内でインスタンス化されたオブジェクトです。つまり、親ビューで:
@implementation
*MyCustomObject customObject;
-(void)viewDidLoad {
customObject = [[MyCustomObject alloc] init];
}
@end
そして、カスタム オブジェクトで:
-(void)DoCoolThings {
UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Do You Want To Do Cool Things"
message:@"...description of cool things..."
delegate:self
cancelButtonTitle:@"No Thanks"
otherButtonTitles:@"HELLS YES", nil];
[message show];
}
と
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 1) {
[self DoCoolThings];
} else {
[self GoAndCry];
}
}
ビューコントローラーオブジェクト内でアラートビューを実行すると、すべて問題ありません。それ自体がビューを持たないこのサブオブジェクト内でそれを行うと、アラートを作成できますが、スコープに基づいて割り当て解除されるべきではないそのオブジェクトは、次のように動作し続けたくないようですデリゲート。
私が受け取っているエラーは確かに割り当て解除メッセージですが、これは問題ではないと強く感じています。アラートを削除すると、他のすべてのもの、具体的にはストアキット購入プロセスのラッパーが機能するためです。これらのデリゲート メソッドはすべて問題なく動作します。
アラートを親ビューのメソッドに移動できるようにするソリューションがありますが、そうする必要がないことを望んでいました。この制限は本当ですか、それとも私の想像ですか? IE 私は何か間違ったことをしていますか?