如何在 iOS 中捕获此异常?
How can I catch this exception in iOS?
这是我的部分代码:
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
}
}];
});
// 根据我的登录服务器和崩溃日志,在某些设备上我的应用程序可以正常执行
[self.rearPicker performSelector:@selector(takePicture) withObject:nil afterDelay:3.f];
// 但之后某处崩溃了。有两种崩溃日志如下:
*** setObjectForKey: object cannot be nil (key: UIImagePickerControllerOriginalImage)
*** 相机:为 mogul
查找捕获设备格式时出错
//我真的很困惑。我怎样才能捕捉到这两个异常?感谢您的耐心和善意!
在@try 中,您所做的只是调度稍后发生的事情。 @try 不包含稍后发生的事情,仅包含执行此操作的请求。
相反,您应该分派给您自己的方法,然后在该方法中直接围绕问题调用添加异常处理 (takePicture
)。请注意,如果该调用执行任何异步操作,那么您将遇到类似的问题。
一般来说,最好添加断点并找出出现问题的原因,这样您就可以添加检查来避免这种情况,而不是在问题发生后再尝试处理。
这是我的部分代码:
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
}
}];
});
// 根据我的登录服务器和崩溃日志,在某些设备上我的应用程序可以正常执行
[self.rearPicker performSelector:@selector(takePicture) withObject:nil afterDelay:3.f];
// 但之后某处崩溃了。有两种崩溃日志如下:
*** setObjectForKey: object cannot be nil (key: UIImagePickerControllerOriginalImage)
*** 相机:为 mogul
查找捕获设备格式时出错
//我真的很困惑。我怎样才能捕捉到这两个异常?感谢您的耐心和善意!
在@try 中,您所做的只是调度稍后发生的事情。 @try 不包含稍后发生的事情,仅包含执行此操作的请求。
相反,您应该分派给您自己的方法,然后在该方法中直接围绕问题调用添加异常处理 (takePicture
)。请注意,如果该调用执行任何异步操作,那么您将遇到类似的问题。
一般来说,最好添加断点并找出出现问题的原因,这样您就可以添加检查来避免这种情况,而不是在问题发生后再尝试处理。