0

9 つの UIImageView を表示するアプリがあり、ユーザーがそれらを削除できる機能を追加しようとしています。そこで、すべてを設定し、ユーザーがタップした画像を削除することを確認するアラート ビューを設定しました。アラート ビューで [はい] をクリックすると、アプリがクラッシュし、デバッガーに次のように表示されます。

2012-04-04 18:19:44.311 AppName[1857:f803] -[UIControl setImage:]: 認識されないセレクターがインスタンス 0x6aac690 に送信されました

2012-04-04 18:19:44.312 AppName[1857:f803] キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: '-[UIControl setImage:]: 認識されないセレクターがインスタンス 0x6aac690 に送信されました'

奇妙な点は、どのコードでも setImage を呼び出していないことです。これは私が取り組んでいるコードです:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)img editingInfo:(NSDictionary *)editInfo {
    if (imageView.image == nil) {
        imageView.image = img;

        self.array = [NSMutableArray arrayWithObject:[NSData dataWithData:UIImagePNGRepresentation(imageView.image)]];

        [picker dismissModalViewControllerAnimated:YES];
        [self.popover dismissPopoverAnimated:YES];
        return;

    }

    if (imageView2.image == nil) {
        imageView2.image = img;
        NSLog(@"The image is a %@", imageView);
        [self.array addObject:[NSData dataWithData:UIImagePNGRepresentation(imageView2.image)]];

        [picker dismissModalViewControllerAnimated:YES];
        [self.popover dismissPopoverAnimated:YES];
        return;
    }

    }

.....

 - (IBAction)deleteButtonPressed:(id)sender {
        NSLog(@"Sender is %@", sender);
        UIAlertView *deleteAlertView = [[UIAlertView alloc] initWithTitle:@"Delete"
                                                                  message:@"Are you sure you want to delete this photo?"
                                                                 delegate:self
                                                        cancelButtonTitle:@"No"
                                                        otherButtonTitles:@"Yes", nil];
        [deleteAlertView show];
        int imageIndex = ((UIButton *)sender).tag;
        deleteAlertView.tag = imageIndex;

    }

    - (void)alertView: (UIAlertView *) alertView 
    clickedButtonAtIndex: (NSInteger) buttonIndex
    {


        if (buttonIndex != [alertView cancelButtonIndex]) {
            NSLog(@"User Clicked Yes. Deleting index %d of %d", alertView.tag, [array count]);
            NSLog(@"The tag is %i", alertView.tag);
            [self.array removeObjectAtIndex: alertView.tag];
            NSLog(@"After deleting item, array count  = %d", [array count]);
        NSLog(@"Returned view is :%@, in view: %@", [self.view viewWithTag:alertView.tag], self.view);
            ((UIImageView *)[self.view viewWithTag:alertView.tag]).image =nil;
        }

        [self.user setObject:self.array forKey:@"images"];
    }

ブレークポイントを追加しましたが、クラッシュの原因となっている行は次のようです。

((UIImageView *)[self.view viewWithTag:alertView.tag]).image =nil; その行の目的は、UI から画像を削除することです。その行がこのエラーを引き起こしている理由はわかりませんが、コードは正しいようです。問題の nib ファイルは単なる UIView ではなく UIControl であるため、それが問題である可能性があります。どんな助けやアドバイスも大歓迎です、ありがとう!

4

2 に答える 2

0

タグがめちゃくちゃになっていたことがわかりました。実際の UIImageView ではないことを忘れて、UIImageView の上に非表示のボタンにタグを付けました。それはすべての奇妙さを説明しています。今回は、UIButtons に従って実際の UIImageViews にタグを付けましたが、現在は正常に動作しています。ご協力いただきありがとうございます。

于 2012-04-05T01:51:05.793 に答える
-1

UIControl にはイメージ プロパティがありません。imageView を UIControl と間違えています

于 2012-04-05T00:30:42.433 に答える