2015-06-20 117 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