测试已测试 | ✓ |
Lang语言 | Obj-CObjective C |
许可 | Apache 2 |
发布最后发布 | 2016年2月 |
由 Michael Ochs,Markus Michel 维护。
HRSCustomErrorHandling 是一个小的框架,为 iOS 应用程序提供错误处理的基础实现。它解决了在不同部分的应用程序中简化错误展示的问题,同时也提供了 API 以实现用户可以选择的特定错误恢复选项。
错误展示简化为单行代码,可以从任意视图、视图控制器或任何继承自 UIResponder
的其他类中调用。
[self presentError:error completionHandler:^(BOOL didRecover) {
if (didRecover) {
[self tryAgain];
}
}];
如果返回的 NSError
操作失败,您需要在视图控制器中实现以下的所有代码。
此项目只需要 Foundation
和 UIKit
框架。
请注意,我们基于 语义版本控制 来进行版本管理,因此建议 CocoaPods 使用主版本中的每个次版本和补丁版本。
通过 CocoaPods 安装库后,应在您的预处理头文件 (.pch 文件) 中添加以下行:
#import <HRSCustomErrorHandling/HRSCustomErrorHandling.h>
要运行示例项目,请首先将仓库克隆,然后从 Example 目录运行 pod install
。
示例项目展示了一个简单的保存操作,如果相关文件已存在则会失败。错误处理会询问您是否要覆盖文件。如果发生任何其他错误,将生成一个默认错误消息。
要在您的应用程序中展示一个错误,您可以在每个 UIView
、UIViewController
或任何继承自 UIResponder
的其他类实例上调用以下方法来显示一个代表错误的 UIAlertView
。
-[UIResponder presentError:completionHandler:]
将您收到的 NSError
对象作为第一个参数传递给此方法。第二个参数是一个完成块,当用户在提示视图中点击一个选项并且错误恢复尝试执行完毕后调用。完成处理程序接受一个参数,一个 BOOL
,它将告诉您错误恢复是否成功。如果恢复成功,可以尝试相同的操作,该操作之前引起错误,并且应该始终这样做。
创建错误时,您需要提供一些警报视图将用于显示和恢复错误的信息。基本错误创建看起来如下
HRSErrorRecoveryAttempter *attempter = [HRSErrorRecoveryAttempter new];
[attempter addOkayRecoveryOption];
NSString *localizedFailureReason = @"No internet connection";
NSString *localizedRecoverySuggestion = @"Sorry, it seems like your device currently does not have access to the internet. Please try again later or check your network settings.";
NSDictionary *userInfo = @{
NSLocalizedFailureReasonErrorKey: localizedFailureReason,
NSLocalizedRecoverySuggestionErrorKey: localizedRecoverySuggestion,
NSLocalizedRecoveryOptionsErrorKey: attempter.localizedRecoveryOptions,
NSRecoveryAttempterErrorKey: attempter
};
NSError *error = [NSError errorWithDomain:MyErrorDomain code:MyErrorCode userInfo:userInfo];
当将此错误传递给 -[UIResponder presentError:completionHandler:]
时,它将创建一个带有标题的警报视图,存储在 NSLocalizedFailureReasonErrorKey
中,以及包含在 NSLocalizedRecoverySuggestionErrorKey
中的消息。警报视图只有一个按钮,标记为 'OK'。不执行恢复。这是展示错误给用户所需的最少信息。
为了添加恢复选项,您需要在添加每个恢复选项时,对 HRSErrorRecoveryAttempter
调用 addRecoveryOptionWithTitle:recoveryAttempt:
。它接受按钮的本地化标题和一个包含用户选择此恢复选项时应触发操作的块。该块返回一个 BOOL
,表示错误恢复是否成功。请注意,您应该始终添加至少一个返回 NO 的恢复选项。这给用户提供了一种在您认为错误恢复成功但错误仍在下一次重试中出现的情况下关闭警报视图的可能性。为了使这更容易,HRSErrorRecoveryAttempter
有一些便捷方法可以添加这样的选项,包括本地化文本。
HRSCustomErrorHandling 在 Apache 2 许可证下可用。有关更多信息,请参阅 LICENSE 文件。