如何重构错误的重复代码?

时间:2014-07-23 07:10:45

标签: objective-c error-handling

我在我的API中使用了块,API类通过下面的代码块来引发错误。

[HJHLifeAPI deletePlantWithIdentifier:identifier completionHandler:^(NSError *error) {
    if (error) {
        [[error alertView] show];
        return ;
    }

    [self refresh:self.refreshControl];
}];

但问题是我在几个地方使用这种代码模式。因此,我应该编写几个重复的代码来进行错误处理。有没有办法重构这段代码?我认为例外可以是一种解决方案,但我认为Apple不鼓励开发人员使用它。

2 个答案:

答案 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];