在我的代码中,我正在执行以下操作:
-(void)pushCropImageViewControllerWithDictionary:(NSDictionary *)dictionary {
civc = [[CropImageViewController alloc] init];
[self presentModalViewController:civc animated:YES];
civc.myImage.image = [dictionary objectForKey:UIImagePickerControllerOriginalImage];
}
所以我在我的应用程序中有一个模式视图。当此模式视图关闭时,我想从父视图(称为pushCropImageViewControllerWithDictionary的视图)中调用方法,如下所示:
-(void)viewWillDisappear:(BOOL)animated {
[super viewWillAppear:animated];
[(AddNewItemViewController *)self.parentViewController addCroppedPicture:screenshot];
}
但是它始终崩溃并显示以下消息:
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[UITabBarController addCroppedPicture:]:无法识别的选择器发送到实例0x4d15930'
有人可以告诉我我在做什么错吗?我包括AddNewItemViewController的标头,因此应该识别选择器。有人可以帮助我如何正确执行此操作吗?谢谢。
编辑:addCroppedPicture的声明:
-(void)addCroppedPicture:(UIImage *)image;
到目前为止,实现本身是空的。
最佳答案
显然,self.parentViewController
不是AddNewItemViewController
的实例,而是标签栏控制器。因此崩溃。
正确的解决方案是委托:
-(void)pushCropImageViewControllerWithDictionary:(NSDictionary *)dictionary
{
civc = [[CropImageViewController alloc] init];
civc.delegate =自我;
[自身presentModalViewController:civc动画:是];
...
}
要将消息发送回委托人:
-(void)viewWillDisappear:(BOOL)动画
{
[super viewWillDisappear:animated];
[self.delegate addCroppedPicture:screenshot];
}
声明委托协议由您决定:
@protocol CropImageDelegate
-(void)addCroppedPicture:(UIImage *)image;
@结束
并将代表的属性添加到CropImageViewController
:
@property(非原子的,分配的)id 委托;
最后,使您的视图控制器符合此委托协议。