我有一个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 ...
我不确定我是否清楚地解释了我的问题,我不知道是否可以解决这个问题,谢谢,等待你的帮助。
答案 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。