最佳实践:错误处理Ruby(Rails)到iOS(AFNetworking)

时间:2013-11-23 00:27:44

标签: ios ruby-on-rails ruby afnetworking

RoR新手,不是iOS新手。

所以我正在使用AFNetworking来处理我的所有api调用。例如:

[[TJAPIClient shared] GET:@"api/taxonomies"
               parameters:nil
                  success:^(AFHTTPRequestOperation *operation, id responseObject)
{
    NSMutableArray *taxonomies = [NSMutableArray arrayWithCapacity:[responseObject[@"taxonomies"] count]];
    [responseObject[@"taxonomies"] each:^(NSDictionary *taxonomyInfo)
    {
        TJTaxonomy *taxonomy = [TJTaxonomy modelWithRemoteDictionary:taxonomyInfo];
        [taxonomies addObject:taxonomy];
    }];

    if (block) block(taxonomies, nil);
}
                  failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
    NSLog(@"Error fetching taxonomies: %@", error);
    [UIAlertView showAlertViewWithTitle:@"Server Error"
                                message:error.localizedDescription
                      cancelButtonTitle:nil
                      otherButtonTitles:nil
                                handler:nil];
    if (block) block(nil, error);
}];

在RoR上,没有什么花哨的东西:

def create
  @user = User.new(user_params)
  respond_to do |f|
    if @user.save
        f.html {}
        f.json { render json: @user }
    else
        f.html {}
        f.json { render json: @user.errors.full_messages }
    end
  end
end

按照目前的情况,上面写的代码通过成功块返回错误,数据如下所示:

{
    errors = (
        @"Email can't be blank",
        @"Password can't be blank"
    )
}

所以我想知道的是我如何通过故障块发送这些错误,以及将相应的错误作为NSError对象发送。如果那是不可能的,那么也许是这种事情的一些最佳实践。再一次,我对RoR世界很陌生(尽管喜欢它!)。

谢谢!

1 个答案:

答案 0 :(得分:-1)

如果要处理这些错误,则必须检查成功回调块的responseObject。

if (responseObject[@"errors"])
    NSLog(@"Oh noes!");
}

错误块是NSURLSessionTaskDelegate的直通 1 ,当URLSession:task:didCompleteWithError:被调用时出错。

NSURLSessionTaskDelegate

  

不通过error参数报告服务器错误。委托通过error参数收到的唯一错误是客户端错误,例如无法解析主机名或连接到主机。

好吧,它也会被来自响应序列化器的任何序列化错误调用。

您可以查看AFURLSessionManagerTaskDelegate的URLSession:task:didCompleteWithError:方法,了解它是如何工作的。