2014-05-19 39 views
0

我有這個api(http://www.timeapi.org/utc/now),只是把時間作爲一個字符串,我想用NSURLConnection來檢索它,除了我很困惑NSURLConnection如何工作。使用NSURLConnection來檢索數據

當前代碼:

+(NSString *) fetchTime 
{ 
    NSString *[email protected]"not_set"; 

    //Code for URL request here 
    NSURL *timeURL = [NSURL URLWithString:@"http://www.timeapi.org/utc/now"] 

    return timeString; 
} 

的方法是從視圖控制器名爲然後將依次顯示在屏幕按照MVC的,我需要的是一個很好的例子,讓我在正確的方向。

+0

檢查本教程:http://agilewarrior.wordpress.com/2012/02/01/how-to-make-http-request-from-iphone-and-parse-json-result/ –

回答

0

爲了使該API的請求,你需要這樣的事:

NSURL *timeURL = [NSURL URLWithString:@"http://www.timeapi.org/utc/now"] 
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url 
              cachePolicy:NSURLRequestReloadIgnoringCacheData 
             timeoutInterval:120]; 
NSData *urlData; 
NSURLResponse *response; 
NSError *error; 

urlData = [NSURLConnection sendSynchronousRequest:urlRequest 
           returningResponse:&response 
              error:&error]; 

NSString *string = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding]; 
0

你想要做什麼是發送異步請求到服務器,以獲取時間。如果您發出同步請求,則會阻止您的用戶界面,並且由於某種原因,如果服務器花了一分鐘時間發送迴應用戶,則無法在一分鐘內執行任何操作。使用標準API的示例:

請注意,如果您使用的是同步請求,則可以預期返回值,但在異步調用中,您需要塊的幫助來返回該值。所以

-(void) fetchTimeFromServerWithCompletionHandler:(void(^)(id)) onComplete { 
      NSURLRequest *timeRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.timeapi.org/utc/now"]]; 
     [NSURLConnection sendAsynchronousRequest:timeRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *urlResponse, NSData *data, NSError *error) { 
      // Do something usefull with Data. 
      // If expected object is a String, alloc init a String with received Data 
      NSString *time = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
      onComplete(time); // This will return back the time string. 
     }]; 
} 

如果你正在使用的服務API很多在你的應用程序,你可以檢查出AFNetworking爲好。

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
[manager GET:@"http://example.com/resources.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSLog(@"JSON: %@", responseObject); 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 
+0

這檢查結果代碼和MIME類型以及響應的字符編碼是否合理 - 在將某些內容作爲字符串使用之後,可能會在稍後遇到問題。 – CouchDeveloper

+0

@CouchDeveloper這就是爲什麼我將一個示例鏈接到AFNetowrking API。您將得到一個成功/失敗塊,並且根據被調用的服務API,必須檢查響應。 – GoodSp33d