2012-11-04 61 views
0

這是我的問題。如果我的應用程序無法加載我的遠程JSON文件,如何顯示錯誤?我在我的電腦上關閉了我的無線網絡,並在模擬器中運行了該應用程序。它NSLogs應該顯示的消息,如果有連接。我怎樣才能解決這個問題?謝謝。如果我的JSON未加載,則顯示UIAlertView?

這裏是我的代碼:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSString *jsonStr = @"http://xxx.com/server.php?json=1"; 
    NSURL *jsonURL = [NSURL URLWithString:jsonStr]; 
    // NSData *jsonData = [NSData dataWithContentsOfURL:jsonURL]; 
    // NSError *jsonError = nil; 
    NSURLRequest *jsonLoaded = [NSURLRequest requestWithURL:jsonURL]; 

    if(!jsonLoaded) { 

     UIAlertView *alertView = [[UIAlertView alloc] init]; 
     alertView.title = @"Error!"; 
     alertView.message = @"A server with the specified hostname could not be found.\n\nPlease check your internet connection."; 
     [alertView addButtonWithTitle:@"Ok"]; 
     [alertView show]; 
     [alertView release]; 
     NSLog(@"No connection, JSON not loaded..."); 

    } 
    else { 
     NSLog(@"JSON loaded and ready to process..."); 
    } 
} 

回答

1

您的代碼只是創建請求。它實際上並不提取數據。您需要使用NSURLConnection來獲取數據。

有多種方式來獲取數據。此示例適用於iOS 5.0或更高版本:

NSOperationQueue *q = [[[NSOperationQueue alloc] init] autorelease]; 
NSURLRequest *jsonRequest = [NSURLRequest requestWithURL:jsonURL]; 
[NSURLConnection sendAsynchronousRequest:jsonRequest 
            queue:q 
         completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 
          // data was received 
          if (data) 
          { 
           NSLog(@"JSON loaded and ready to process..."); 
           // ... process the data 
          } 
          // No data received 
          else 
          { 
           NSLog(@"No connection, JSON not loaded..."); 
           // ... display your alert view 
          } 
         }]; 
+0

謝謝,我現在就試試這個。我可以插入這段代碼嗎?根據NSUrl? – 1789040

+0

這仍然不起作用。我的json位於外部URL。我的無線網絡關閉了,它仍然說,當它不可能時json被加載。 – 1789040

+0

你的代碼現在可以工作,但它只是NSLogs ...它不顯示alertview。 – 1789040

0

您還沒有實際要求的任何事情。關於如何提出請求,請閱讀here

基本上,你想要做的是執行NSURLConnectionDelegate協議並覆蓋connection:didFailWithError:函數來偵聽失敗事件。