【问题标题】:Why is My Application Crashing When I Call a Method in self.parentViewController?为什么我在 self.parentViewController 中调用方法时应用程序崩溃?
【发布时间】:2011-04-22 22:13:22
【问题描述】:

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

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

到目前为止,实现本身是空的。

【问题讨论】:

  • 你能发布 addCroppedPicture 的声明吗?

标签: iphone objective-c ios ios4


【解决方案1】:

显然,self.parentViewController 不是AddNewItemViewController 的实例,而是标签栏控制器。因此崩溃了。

正确的解决方案是委托:

-(void)pushCropImageViewControllerWithDictionary:(NSDictionary *)dictionary { civc = [[CropImageViewController alloc] init]; civc.delegate = 自我; [自我presentModalViewController:civc动画:是]; ... }

要向代表发送回消息:

-(void)viewWillDisappear:(BOOL)动画 { [超级viewWillDisappear:动画]; [self.delegate addCroppedPicture:screenshot]; }

由你决定是否声明委托协议:

@protocol CropImageDelegate - (void)addCroppedPicture:(UIImage*)image; @结尾

并将代理的属性添加到CropImageViewController

@property (nonatomic, assign) id 委托;

最后,让你的视图控制器符合这个委托协议。

【讨论】:

  • 好吧,该解决方案在大多数情况下都有效,我有一个问题可能有点愚蠢,但我真的需要知道:我不完全希望 viewWillDisappear 在代表将消失。我还有一个“取消”按钮,它可以关闭模​​式视图而不做任何事情。所以我可以在不完全调用 viewWillDisappear 的情况下做到这一点,对吧?
  • 您的模态视图控制器应该有两个按钮:“完成”(或“保存”)和“取消”。 “完成”将“执行操作”,然后您应该将两个操作关联到它:调用委托、关闭视图。 “取消”表示用户想要取消任何操作,那么您必须简单地将窗口关闭到与其关联的操作。
  • 是的,我保留了 viewWillDisappear 位,因为您使用了它,但最好按照 viggio24 描述的方式进行。
猜你喜欢
  • 1970-01-01
  • 2018-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多