这对高级和经验丰富的开发人员来说可能是一个明显的问题,所以我真的害怕问这个问题。向用户iOS显示错误信息的最佳方法
假设我有一个移动应用程序,它针对不同的数据模型调用了太多的RESTful API。假设有ViewController A,B,C可以在这些模型上进行CRUD。现在有几件事情可能会出错。每个呼叫都有一个故障块。我正在使用Strongloop/Loopback ios sdk。
悄悄忽略这样的错误的策略:
[repo logoutWithSuccess:^(){
// ... success code
} failure:CALLBACK_FAILURE_BLOCK];
具有限定CALLBACK_FAILURE_BLOCK
为
#define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#define CALLBACK_FAILURE_BLOCK \
^(NSError *error) { \
ALog("Callback failed: %@", error.description); \
}
将是一个理想的世界里,每一个客户端验证工作完全伟大,人们可以把头埋在沙子里。
目前我已经在每个ViewController中定义了一个帮助函数,当这些调用失败时向用户显示一个警报。
[self.trip saveWithSuccess:^(){
//... success code
} failure:^(NSError *error){
[self displayErrorWithMessage:[error localizedDescription]
andTitle:NSLocalizedString(@"Service Error", @"Server Error")];
}];
和
- (void)displayErrorWithMessage:(NSString*)msg andTitle:(NSString*)title{
UIAlertController* alert = [UIAlertController alertControllerWithTitle:title
message:msg
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
}];
[alert addAction:defaultAction];
[self presentViewController:alert animated:YES completion:nil];
}
我想重构这个辅助函数是在一个共同的地方,例如像AppDelegate中(也许在一个协议)。
这是一个正确的战略,你有任何其他最好的做法,如何更好地设计它?
我认为你做得很好。但是,如果将相同的功能复制到整个视图控制器,则意味着您有代码复制。最简单的方法来处理它,你可以拥有所有视图控制器的基本视图控制器,并只实现一次该功能。之后,你可以很容易地对他们进行操作,如添加自定义错误视图,你可以给动画等。 – kekkeme
@Sanandrea如果有人回答你的问题,这是你的工作,让你的宝贵意见。 – ChenSmile