2015-05-30 141 views
-1

我写了一个函数从URL中获取NSDictionary异步函数不返回数据

[Data loadFromAPI:@"http://example.com/api" withSuccess:^(id data) { 
    NSMutableDictionary *result = (NSDictionary *)data; 

    CLS_LOG(@"result: %@", result); 
} failure:^(NSError *error) { 
    CLS_LOG(@"Error: %@", error); 
}]; 

它会调用该函数是下面的一个:

typedef void (^Success)(id data); 
typedef void (^Failure)(NSError *error); 

+ (void)loadFromAPI:(NSString *)apiURL withSuccess:(Success)success failure:(Failure)failure { 
    NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init]; 

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:apiURL]]; 

    NSMutableURLRequest *mutableRequest = [request mutableCopy]; 

    request = [mutableRequest copy]; 

    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
    operation.responseSerializer = [JSONResponseSerializerWithData serializer]; 

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 

     NSArray *jsonArray = (NSArray *)responseObject ; 

     NSDictionary *result = [NSDictionary dictionaryWithObjectsAndKeys: 
           [self now], @"time", 
           jsonArray, @"response", 
           nil]; 

     CLS_LOG(@"Result is: %@", result); 

     success(result); 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     failure?failure(error):nil; 
    }]; 

    [operationQueue setMaxConcurrentOperationCount:1]; 
    [operationQueue addOperations:@[operation] waitUntilFinished:NO]; 
} 

CLS_LOG(@"Result is: %@", result);返回返回的数据在函数内部。但是,我所称的功能CLS_LOG(@"result: %@", result);返回null。我究竟做错了什么?

+0

为什么你要在这行中为'NSMutableDictionary'分配一个'NSDictionary':'NSMutableDictionary * result =(NSDictionary *)data;' – johnpatrickmorgan

+0

[self now]?哪里是? – 0yeoj

回答

0

事实证明[self now]返回null,所以NSDictionary没有被正确设置。

+0

所以这两个日志显示'空',那么我假设? – johnpatrickmorgan

+0

@ user4486205那你的意思是“在函数CLS_LOG(@”Result is:%@“,result)内部;返回返回的数据” –

0

问题是

NSMutableDictionary *result = (NSDictionary *)data;

你不能直接这样做,我不知道为什么你不拥有该警告..

NSMutableDictionary *result = [[NSMutableDictionary alloc] initWithDictionary:(NSDictionary *)data]; 

可能会解决这个问题...