【问题标题】:How can I catch this exception in iOS?如何在 iOS 中捕获此异常?
【发布时间】:2015-10-27 10:48:32
【问题描述】:

这是我的代码的一部分:

self.rearPicker = [[UIImagePickerController alloc] init];
self.rearPicker.delegate = self;
self.rearPicker.sourceType = UIImagePickerControllerSourceTypeCamera;
self.rearPicker.cameraDevice = UIImagePickerControllerCameraDeviceRear;
self.rearPicker.showsCameraControls = NO;
dispatch_async(dispatch_get_main_queue(), ^{
[self presentViewController:self.rearPicker animated:YES completion:^{
    // send log to my server.And log's success in sending shows that  everything goes pretty well until this line.
    @try {
    // I think it's this line of code that causes crash on some device. What else can I do to avoid crashes besides @try-@catch.
    [self.rearPicker performSelector:@selector(takePicture) withObject:nil afterDelay:3.f];
    }
    @catch (NSException *exception) {
      [self dismissViewControllerAnimated:YES completion:nil];
    }
    @finally {
         // do nothing for now
    }

   }];
});

//根据我的登录服务器和crash log,在某些设备上我的App可以正常执行

[self.rearPicker performSelector:@selector(takePicture) withObject:nil afterDelay:3.f];

// 但在此之后某处坠毁。崩溃日志有以下两种:

  1. *** setObjectForKey:对象不能为nil(键:UIImagePickerControllerOriginalImage)

  2. *** 相机:查找 mogul 的捕获设备格式时出错

// 我真的很困惑。我怎样才能捕捉到这两个异常?感谢您的耐心和善意!

【问题讨论】:

  • 请添加takePicture方法
  • takePicture 方法是 iOS SDK 方法“-[UIImagePickerController takePicture]”。谢谢!

标签: ios exception crash uiimagepickercontroller


【解决方案1】:

在@try 中,您所做的只是调度稍后发生的事情。 @try 不包含稍后发生的事情,只包含执行它的请求。

相反,您应该分派给自己的方法,然后在该方法中直接在问题调用周围添加异常处理 (takePicture)。请注意,如果该调用执行任何异步操作,那么您将遇到类似的问题。

一般来说,最好添加断点并找出问题的原因,这样您就可以添加检查来避免这种情况,而不是在它发生后尝试处理它。

【讨论】:

  • 那么以这种方式来做呢:@try { sleep(3); [self.rearPicker takePicture]; } 谢谢。
  • 感谢您的回答。
猜你喜欢
  • 2010-10-18
  • 2011-10-17
  • 1970-01-01
  • 2014-07-08
  • 2013-09-20
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多