iOS方法重用(传递参数)

时间:2014-01-22 07:44:59

标签: ios methods parameters reusability

我有一个url请求方法,因为每个页面都会被使用,我想让它公开。 (英语水平差,原谅我) 这是我的班级方法:

- (void)httpRequest :(NSString *)url :(NSMutableArray *)array;

{

    NSURL *myUrl = [NSURL URLWithString:url];

    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:myUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];

    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)

     {

         NSLog(@"请求完成");

         NSArray *arr;

         arr = [NSJSerialization JSONObjectWithData:operation.responseData options:NSJSONReadingAllowFragments error:NULL];

         [array addObjectsFromArray:arr];

            ???????

     }failure:^(AFHTTPRequestOperation *operation, NSError *error){

         NSLog(@"请求失败: %@", error);
            ??????
     }];
    [operation start];
}

我知道如何传递简单的参数,比如数组和url.But当我使用这个方法时,问号中的代码每次都会有所不同。我可以做些什么来传递它,就像参数一样。

赞:[myApple httpRequest :myurl :myarray : (susucess .....) : (failure......)]; 问号可以填写:mytableView reloadData或nslog ...
我不确定我是否清楚地解释了我的问题,我不知道是否可以解决这个问题,谢谢,等待你的帮助。

1 个答案:

答案 0 :(得分:0)

首先,请注意Objective-C中的所有方法参数都应该命名。因此,您应该拥有类似的内容:

,而不是- (void)httpRequest :(NSString *)url :(NSMutableArray *)array;
- (void)performHttpRequestWithURL:(NSString *)url resultsArray:(NSMutableArray *)array; 

要回答您的问题,您可以将自己的完成块传递给您的方法。一旦AFNetworking完成其HTTP请求,您就可以调用此块。

- (void)performHTTPRequestWithURL:(NSString *)urlString completion:(void (^)(NSArray *results, NSError *error))completion
{
    NSURL *url = [NSURL URLWithString:urlString];

    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url 
                                                  cachePolicy:NSURLRequestUseProtocolCachePolicy 
                                              timeoutInterval:10];

    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
    {
        NSLog(@"请求完成");

        NSArray *results = [NSJSerialization JSONObjectWithData:operation.responseData options:NSJSONReadingAllowFragments error:nil];

        if (completion)
            completion(results, nil);
    }
    failure:^(AFHTTPRequestOperation *operation, NSError *error)
    {
        NSLog(@"请求失败: %@", error);

        if (completion)
            completion(nil, error);
    }];

    [operation start];
}

然后你可以调用你的方法并传入一个块:

[self performHTTPRequestWithURL:@"http://www.example.com" completion:^(NSArray *results, NSError *error) {
    if (error) 
    {
          // handle error
    }
    else
    {
        // reload tableview or similar
    }
 }];

有关块的更多信息,请查看Apple的Blocks Programming Guide