我正在使用AFNetworking进行一些GET查询.但我的函数总是返回nil值.哪里错了?
+ (NSString *)getRequestFromUrl:(NSString *)requestUrl {
NSString * completeRequestUrl = [NSString stringWithFormat:@"%@%@", BASE_URL, requestUrl];
__block NSString * results;
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:completeRequestUrl parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
results = [NSString stringWithFormat:@"%@", responseObject];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
results = [NSString stringWithFormat:@"Error"];
}];
NSLog(@"%@", results);
return results;
}
Run Code Online (Sandbox Code Playgroud)
谢谢!阿尔乔姆.
你没有看到的结果,因为你传递的块success和failure异步运行; 当你NSLog被调用时,web服务还没有返回.如果移动NSLog成功和失败块的内部,您应该看到结果输出到控制台.
由于这些调用的异步性质,您将无法简单地从方法返回值.相反,您可能希望将自己的块作为参数,然后在获得结果时可以调用该参数.例如:
+ (void)getRequestFromUrl:(NSString *)requestUrl withCompletion:((void (^)(NSString *result))completion
{
NSString * completeRequestUrl = [NSString stringWithFormat:@"%@%@", BASE_URL, requestUrl];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:completeRequestUrl parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSString *results = [NSString stringWithFormat:@"%@", responseObject];
if (completion)
completion(results);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSString *results = [NSString stringWithFormat:@"Error"];
if (completion)
completion(results);
}];
}
Run Code Online (Sandbox Code Playgroud)
然后你会像这样调用你的方法:
[YourClass getRequestFromUrl:@"http://www.example.com" withCompletion:^(NSString *results){
NSLog(@"Results: %@", results);
}
Run Code Online (Sandbox Code Playgroud)
AFNetworking的示例项目有一个使用块参数从Web服务调用返回值的示例:https://github.com/AFNetworking/AFNetworking/blob/master/Example/Classes/Models/Post.m
| 归档时间: |
|
| 查看次数: |
298 次 |
| 最近记录: |