我在我的API中使用了块,API类通过下面的代码块来引发错误。
[HJHLifeAPI deletePlantWithIdentifier:identifier completionHandler:^(NSError *error) {
if (error) {
[[error alertView] show];
return ;
}
[self refresh:self.refreshControl];
}];
但问题是我在几个地方使用这种代码模式。因此,我应该编写几个重复的代码来进行错误处理。有没有办法重构这段代码?我认为例外可以是一种解决方案,但我认为Apple不鼓励开发人员使用它。
答案 0 :(得分:0)
这取决于你的HJHLifeAPI是如何设计的。
我通常使用AFNetworking来处理API事情,这是一个例子。
// This is the method like deletePlantWithIdentifier:
// It actually invoke __requestWitPath:
- (void)requestSomethingWithId:(NSString *)memId done:(NetDoneBlock)done
{
NSMutableDictionary *param_ = @{@"key":@"id"};
[self __requestWithPath:@"/apiPath.jsp" parameter:param_ done:done];
}
#pragma PRIVATE
- (void)__requestWithPath:(NSString *)apiPath parameter:(NSDictionary *)parameter done:(NetDoneBlock)done
{
AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:SERVER_URL]];
AFHTTPRequestOperation *operation = [manager POST:apiPath parameters:parameter constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
done();
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// Error Handle Here
}];
[operation start];
}
您可以在一个__request...
中处理所有错误。
答案 1 :(得分:0)
创建块
void(^errorHandler)(NSError *error) = ^(NSError *error) {
if (error) {
[[error alertView] show];
return ;
}
[self refresh:self.refreshControl];
}
将它保存在某处(不要忘记copy it)
self.errorHandler = errorHandler;
在任何地方重复使用:
[HJHLifeAPI deletePlantWithIdentifier:identifier completionHandler:self.errorHandler];