您不能使用完成块为您的方法创建返回值。其AFJSONRequestOperation
工作是异步的。someFunction
将在操作仍在进行时返回。成功和失败块是您如何在需要的地方获得结果值。
这里的一种选择是将调用者作为参数传递给您的包装器方法,以便完成块可以传递数组。
- (void)goFetch:(id)caller
{
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
success: ^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
[caller takeThisArrayAndShoveIt:[JSON valueForKey:@"posts"]];
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {}
}
您还可以让您的调用者创建并传递一个 Block 以在成功时运行。然后goFetch:
不再需要知道调用者上存在哪些属性。
- (void)goFetch:(void(^)(NSArray *))completion
{
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
success: ^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
if( completion ) completion([JSON valueForKey:@"posts"]);
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {}
}