The*_*ebe 5 iphone error-handling exception-handling objective-c
我有一个关于iPhone上的错误/异常处理的问题.
我已经阅读了有关Exception的文档,似乎异常只能用于特殊情况.
这是否意味着你不能像在java中那样使用它们?
例如,我正在尝试为我的应用程序编写一个用例控制器.我从以前使用该语言的项目中获得了Java中的一些示例,它们在出现错误时使用异常.
简单的问题是:我可以遵循我在Java中使用的示例,并在Objective-C中"翻译"它(并使用Objective-C异常)或者有更好的方法吗?
这是我想使客观c友好的代码:
public void addPerformance(Perfomance perf) {
//do some preparation
...
//execute the usecase
executor(new AddPerformance(perf));
}
private void executor(Usecase usecase) {
try {
UnitOfWorkServices.INSTANCE.bizTransactionStart();
usecase.execute();
UnitOfWorkServices.INSTANCE.bizTransactionCommit();
} catch (RealException re) {
UnitOfWorkServices.INSTANCE.bizTransactionEscape();
throw re;
} catch (Exception e) {
UnitOfWorkServices.INSTANCE.bizTransactionEscape();
throw new FatalException(this.getClass().getName() + " / executor("
+ usecase.getClass().getSimpleName() + ")", e,
"APPXCP_006_UNEXPECTED_EXCEPTION",
"\n\t |*| : Unexpected exception translated into FatalException");
} finally {
UnitOfWorkServices.INSTANCE.bizTransactionEnd();
}
}
Run Code Online (Sandbox Code Playgroud)
所有异常都是由UI捕获以显示错误消息.
谢谢你的帮助,迈克尔
一般来说,是的,您可以将 try/catch 逻辑转换为 Objective-C 中的类似结构,并获得类似的结果。不过,请务必小心该throw re;行,因为 iPhone 上未捕获的异常将使您的应用程序崩溃。
然而更重要的是,iPhone SDK 和其他常用库使用的标准模式是,由于各种原因可能失败的 API 方法不会抛出异常,而是返回一个布尔值,指示操作是否成功,并且接受对指针的引用作为参数,NSError该指针在发生错误时使用,以便为调用者提供有关错误原因的具体详细信息。因此,在这种情况下,您的代码可能会转换为更像这样的内容:
NSError* error = nil;
[[UnitOfWorkServices sharedInstance] bizTransactionStart];
bool success = [usecase execute:&error];
if (success) {
[[UnitOfWorkServices sharedInstance] bizTransactionCommit];
}
else if (error) {
int code = [error code];
[[UnitOfWorkServices sharedInstance] bizTransactionEscape];
if (code == MY_MINOR_ERROR_CODE) {
//do something
}
else if (code == MY_FATAL_ERROR_CODE) {
//do something else
}
else {
//handle unexpected error type(s)
}
}
else {
//operation failed with no specific error details
[[UnitOfWorkServices sharedInstance] bizTransactionEscape];
//handle generic error
}
[[UnitOfWorkServices sharedInstance] bizTransactionEnd];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
660 次 |
| 最近记录: |