在我的代码中,我正在执行以下操作:
-(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;
到目前为止,实现本身是空的。
答案 0 :(得分:2)
显然,self.parentViewController
不是AddNewItemViewController
的实例,而是标签栏控制器。因此崩溃。
正确的解决方案是成为代表:
-(void)pushCropImageViewControllerWithDictionary:(NSDictionary *)dictionary { civc = [[CropImageViewController alloc] init]; civc.delegate = self; [self presentModalViewController:civc animated:YES]; ... }
将消息发送回代理人:
-(void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [self.delegate addCroppedPicture:screenshot]; }
由您来声明委托协议:
@protocol CropImageDelegate <NSObject> - (void)addCroppedPicture:(UIImage*)image; @end
并将代理人的属性添加到CropImageViewController
:
@property (nonatomic, assign) id<CropImageDelegate> delegate;
最后,让您的视图控制器符合此委托协议。