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 であるため、それが問題である可能性があります。どんな助けやアドバイスも大歓迎です、ありがとう!