始终从iOS中的函数获得nil值

Art*_* Z. 0 ios

我正在使用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)

谢谢!阿尔乔姆.

Jam*_*ost 6

你没有看到的结果,因为你传递的块successfailure异步运行; 当你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