0

次のように機能するアクションシートがあります。

- (void)Method1 {
    UIActionSheet *photoSourceSheet=[[UIActionSheet alloc]
                                     initWithTitle:@"Options"
                                     delegate:self
                                     cancelButtonTitle:@"Exit"
                                     destructiveButtonTitle:nil
                                     otherButtonTitles:@"opt1",@"opt2", @"opt3", nil];
    photoSourceSheet.tag=1;
    photoSourceSheet.delegate=self;
    [photoSourceSheet showInView:self.view];
}

- (void)Method2 {
    UIActionSheet *photoSourceSheet1=[[UIActionSheet alloc]
                                      initWithTitle:@"Select Video"
                                      delegate:self
                                      cancelButtonTitle:@"Cancel"
                                      destructiveButtonTitle:nil
                                      otherButtonTitles:@"Take New Video", @"Choose Existing Video", nil];
    //   photoSourceSheet.delegate=self;
    photoSourceSheet1.tag=2;
    photoSourceSheet1.delegate=self;
    [photoSourceSheet1 showInView:self.view];
}

次に、私のデリゲートには次のものがあります。

- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex: NSInteger)buttonIndex {
    if (actionSheet.tag==1) {
        if (buttonindex==2) {
            [self method2];
        }
    } else if (actionSheet.tag==2) {
        // some code
    }
}

私のデリゲート メソッドは、最初のアクション シート、つまり photoSourceSheet に対して呼び出されますが、photoSourceSheet1 に対しては呼び出されません。シートを手動で閉じるなど、何か特別なことをする必要がありますか? 2 番目UIActionSheet(photoSourceSheet1) が表示されますが、シートでオプションを選択するとすぐにアプリがクラッシュします。EXEC_BAD_ACCESS をスローします

4

1 に答える 1

1

上記のコードに問題はありません。EXEC_BAD_ACCESS は、基本的にメモリ管理が悪いためです。使用されているオブジェクトを意図せずに削除することがあります。ゾンビを有効にしてみてください。正確な問題領域が表示されます。

手順: スキームのメモリ管理の編集に移動します。ゾンビ オブジェクトを有効にするオプションをオンにします。

于 2012-10-16T19:41:47.713 に答える