我编写了一个 POST 方法,该方法需要将一个 JSON 返回给调用她的视图控制器。如果我添加成功块return _jsonDictionary;
,我将收到此错误:
Incompatible block pointer types sending 'id (^)(NSURLRequest *__strong, NSHTTPURLResponse *__strong, __strong id)' to parameter of type 'void (^)(NSURLRequest *__strong, NSHTTPURLResponse *__strong, __strong id)'
我猜是因为它是异步的,所以添加一个 return 将强制它同步,但是,我希望我的应用程序的所有 POST 方法都在一个类中,因此将数据从 JSON 中获取到在我的应用程序中声明的变量中使用的东西喜欢valueForKey
让事情对我来说有点复杂。这是糟糕的设计吗?
-(NSDictionary *)getData
{
_jsonDictionary = [[NSDictionary alloc]init];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/getSomething",MainURL ]];
[AFJSONRequestOperation addAcceptableContentTypes:[NSSet setWithObject:@"text/html"]];
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:nil parameters:nil];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON)
{
_jsonDictionary = JSON;
NSLog(@"jsonDictionary: %@",_jsonDictionary);
}
failure:^(NSURLRequest *request , NSURLResponse *response , NSError *error , id JSON)
{
NSLog(@"request: %@",request);
NSLog(@"Failed: %@",[error localizedDescription]);
}];
[httpClient enqueueHTTPRequestOperation:operation];
}
另一个问题,为什么我会在上面的代码末尾收到这个警告:Control reaches end of non-void function
即使我将 .m 和 .h 中的方法名称更改为-(void )getData
??