在我的代码中,我正在执行以下操作:

-(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 委托;


最后,使您的视图控制器符合此委托协议。

09-11 06:08