2015-06-20 116 views
0

嗨读取数据,所以我想从这个网站检索数据:对于我正在一个应用程序http://www.timeapi.org/utc/now,但是当我提出用下面的代码的要求,我总是得到空:错误从网站

NSURL * timeAPI = [[NSURL alloc]initWithString:@"http://www.timeapi.org/utc/now"]; 

NSURLRequest * urlRequest = [[NSURLRequest alloc]initWithURL:timeAPI]; 

__block NSData * responseData; 

[NSURLConnection sendAsynchronousRequest:urlRequest queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { 
    if(connectionError) 
    { 
     NSLog(@"error fetching data"); 
    } 
    else{ 
     responseData = [[NSData alloc]initWithData:data]; 
    } 
}]; 

NSError* error = nil; 
NSLog(@"%@, erorr:", responseData); 

任何人都可以找出问题吗?

回答

1

请求需要时间并且在您的日志语句中数据尚未到达。在else子句中放入一个responseData日志,即数据可用时您将看到它。

您不需要(或者不需要)__block声明。
[[NSData alloc]initWithData:data]是不必要的,只需使用initWithData:data

示例代码:

NSURL * timeAPI = [NSURL URLWithString:@"http://www.timeapi.org/utc/now"]; 
NSURLRequest * urlRequest = [[NSURLRequest alloc] initWithURL:timeAPI]; 

[NSURLConnection sendAsynchronousRequest:urlRequest queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { 
    if(connectionError) { 
     NSLog(@"error fetching data: %@", connectionError); 
    } 
    else { 
     NSLog(@"data: %@", data); 

     NSString *dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
     NSLog(@"dataString: %@", dataString); 

     // Do something with the data 
    } 
}]; 
+0

谢谢!我会做出改变;另外,我如何解决使用块声明?如果我不使用它,那么它说我错过了块标识符。 – user1549792

+0

在完成块中将数据保存到某个属性或放入通知中。使用self来设置属性是很好的,因为该块不是由self引用的。 – zaph