gpt4 book ai didi

iphone - 如何正确处理 iPhone 上的错误

转载 作者:太空狗 更新时间:2023-10-30 03:52:54 24 4
gpt4 key购买 nike

我对 iPhone 上的错误/异常处理有疑问。

我看过关于异常的文档,似乎异常只能用于异常情况。

这是否意味着您不能像在 java 中那样使用它们?

例如,我正在尝试为我的应用程序编写一个用例 Controller 。我从以前使用该语言的项目中获得了一些 Java 示例,这些示例在出现错误时使用异常。

简单地说,问题是:我能否遵循我在 Java 中获得的示例,并在 Objective-C 中“翻译”它(并使用 Objective-C 异常),或者是否有更好的方法来做到这一点?

这里是我想让 objective-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();
}
}

所有的异常都应该被 UI 捕获以显示错误消息。

感谢您的帮助,迈克尔

最佳答案

一般来说,是的,您可以将您的 try/catch 逻辑转换为 Objective-C 中的可比较结构并获得可比较的结果。不过一定要小心 throw re; 行,因为 iPhone 上未捕获的异常会使您的应用程序崩溃。

然而,更重要的是,iPhone SDK 和其他常用库使用的标准模式是,由于各种原因可能失败的 API 方法不会抛出异常,而是返回一个 bool 值,指示操作是否成功成功,并接受对 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];

关于iphone - 如何正确处理 iPhone 上的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5950158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com