【问题】
在折腾
【未解决】关于iOS/iPhone中的文件选择对话框,用于用户去选择图片等文件
的过程中,写了代码:
- (void)viewDidLoad { self.imgPickerController = [[UIImagePickerController alloc] init]; UITapGestureRecognizer *imgTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleImageTap)]; imgTap.numberOfTapsRequired = 1; imgTap.numberOfTouchesRequired = 1; [self.birdImageView addGestureRecognizer:imgTap]; ...... } //handle the tap to image -(void)handleImageTap:(UITapGestureRecognizer *)sender{ if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) { NSArray *availableMediaTypeArr = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeSavedPhotosAlbum]; self.imgPickerController.mediaTypes = availableMediaTypeArr; //[self presentViewController:self.imgPickerController animated:YES completion:NULL]; } }
但是结果运行时出错:
2012-09-11 09:31:08.542 BirdWatching[467:11603] -[AddSightingViewController handleImageTap]: unrecognized selector sent to instance 0x6d97d20
(lldb)
【解决过程】
1.后来找到出错的位置是:
对应的,说是找不到handleImageTap这个selector。
2.此处不清楚什么是selector的。
但是后来找到了所参考代码的页面:
click any UIImage and open an UIImageView in objective-c
然后注意到,问题回答处的示例代码中,函数后面是带冒号的,
[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
但是问题中的示例代码,函数直接写成了不带冒号的:
tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(yourSelector)];
导致我参考其代码,就没有写冒号。
然后又注意到,别的地方也是函数带冒号的:
IOS开发之触摸与点击事件:UITapGestureRecognizer与UIPanGestureRecognizer应用
3.先去添加上冒号试试。
然后就解决问题了,函数可以正常执行到对应位置了:
【总结】
之前出现“unrecognized selector sent to instance ”的错误:
【已解决】UITableViewController setDataController:unrecognized selector sent to instance
当时的原因是类不匹配,导致没有对应的方法,报此错误的。
此处出现此错误,却不由于没太注意,(刚开始也不懂),参考别人代码时,写了个函数,但是没有添加上后面耳朵冒号,导致此函数是非法的方法,所以找不到对应的方法。
解决办法就是,添加上对应的冒号即可。
转载请注明:在路上 » 【已解决】iOS程序出错:[AddSightingViewController handleImageTap]: unrecognized selector sent to instance 0x6d97d20