STIErrorHandling
STIErrorHandling 是一个小的框架,它为 iOS 应用程序提供了错误处理的底层实现。它处理了将错误呈现为应用程序各种部分的问题,并提供了 API,以实现用户可以选择的错误特定恢复选项。
错误呈现简化为可以由任何视图、视图控制器或继承自 UIResponder
的任何其他类调用的单行代码。
[self presentError:error completionHandler:^(BOOL didRecover) {
if (didRecover) {
[self tryAgain];
}
}];
如果返回的 NSError
操作失败,您需要在视图控制器中实现的所有代码如下。
要求
该项目只需要 Foundation
和 UIKit
框架。
用法
要运行示例项目,先克隆仓库,然后从 Example 目录运行 pod install
。
示例项目展示了一个简单的保存操作,如果相关的文件已存在,将失败。错误处理会询问您是否要覆盖文件。如果发生其他错误,将生成默认错误消息。
呈现错误
为了在你的应用程序中显示错误,你可以在每个UIView
、UIViewController
或任何继承自UIResponder
的类的实例中调用以下方法以显示表示错误的UIAlertController
-[UIResponder presentError:completionHandler:]
你将收到的NSError
对象作为此方法的第一个参数传递。第二个参数是一个完成块,在用户点击提示框中的一个选项并完成错误恢复尝试后调用。完成处理程序接收一个参数,即一个报告错误恢复是否成功的BOOL
值。如果恢复成功,则可以安全地再次尝试之前导致错误的同一操作,并且应该始终这样做。
创建一个错误
要创建一个错误,你需要提供一些警告视图将用于显示和恢复错误的信息。基本的错误创建看起来像这样
STIErrorRecoveryAttempter *attempter = [STIErrorRecoveryAttempter 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
中存储的消息的警告视图。警告视图只有一个按钮,标记为'确定'。不执行任何恢复。这是向用户显示错误所需的最低信息。
要添加恢复选项,你将需要在添加每个恢复选项时,在STIErrorRecoveryAttempter
上调用一次addRecoveryOptionWithTitle:recoveryAttempt:
。它接收按钮的本地化标题和包含应该触发用户选择此恢复选项时应该执行的操作的代码块。代码块返回一个BOOL
,描述错误恢复是否成功。请注意,你应该始终添加至少一个返回NO的恢复选项。这给用户提供了在您认为您的错误恢复成功但错误仍然在下次重试中发生时 dismiss 警告视图的可能性。为了使这对你来说更容易,STIErrorRecoveryAttempter
有几个方便的方法,可以添加此类选项,包括本地化文本。
拦截一个错误
有时你想在途中拦截一个错误,例如为了在行内显示它。要检查是否想拦截一个错误,你可以重写-[UIResponder canInterceptError:]
。如果你返回YES
,则调用-[UIResponder interceptError:completionHandler:]
,并且错误将不会在响应者链中进一步传递。确保调用完成处理程序。
安装
STIErrorHandling 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod "STIErrorHandling"
请注意,我们根据 语义化版本控制 来标注发行版,所以建议 Cocoapods 使用主版本之内的每个次版本和修订版。
HRSCustomErrorHandling
STIErrorHandling 是从优秀项目 HRSCustomErrorHandling 分支出来的,遗憾的是该项目已不再维护。
许可协议
STIErrorHandling 在 Apache 2 许可协议下提供。有关更多信息,请参阅 LICENSE 文件。