2012-12-29 54 views
0

我正在從服務url獲取xml響應,並且我想在網絡連接失敗時顯示錯誤。所以我顯示UIAlertView,但是這個alertView在剩下的過程完成後顯示出來。我希望它立即顯示。當網絡連接失敗時停止下一個進程

在android中,如果網絡連接失敗,它將顯示一個錯誤提醒,「不幸的應用程序名稱已終止」。 iPhone上有這樣的東西嗎?如果沒有,我想顯示alertview並停止其餘的過程。

這是我工作的代碼:

if (responseData!= NULL) 
     { 
      response = [[NSString alloc] initWithData:responseData 
              encoding:NSUTF8StringEncoding ]; 
      NSLog(@"Response Code:%d",[urlResponse statusCode]); 
      if([urlResponse statusCode ]>=200 && [urlResponse statusCode]<300) 
      { 
       NSLog(@"Response:%@",response); 
      } 
     } 
     else 
     { 
      NSLog(@"Failed to send request: %@", [error localizedDescription]); 

       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Unfornately stopped.Try Again " message:@"" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
       [alert show]; 
       [alert release]; 
     } 

     parser =[[NSXMLParser alloc]initWithData:responseData]; 
     [parser setDelegate:self]; 
     [parser setShouldProcessNamespaces:NO]; 
     [parser setShouldReportNamespacePrefixes:NO]; 
     [parser setShouldResolveExternalEntities:NO]; 
     [email protected]"1"; 
     [parser parse]; 
     [parser release]; 

在我的代碼,如果它不能發送請求,然後得到的NSLog打印並執行alertView代碼。與此同時,我想停止其他過程,即初始化解析器並執行其餘的操作。

我該怎麼辦?

回答

0

非常簡單...將您的解析代碼移到if塊內。

if (responseData!= NULL) 
    { 
     response = [[NSString alloc] initWithData:responseData 
             encoding:NSUTF8StringEncoding ]; 
     NSLog(@"Response Code:%d",[urlResponse statusCode]); 
     if([urlResponse statusCode ]>=200 && [urlResponse statusCode]<300) 
     { 
      NSLog(@"Response:%@",response); 
     } 

     parser =[[NSXMLParser alloc]initWithData:responseData]; 
     [parser setDelegate:self]; 
     [parser setShouldProcessNamespaces:NO]; 
     [parser setShouldReportNamespacePrefixes:NO]; 
     [parser setShouldResolveExternalEntities:NO]; 
     [email protected]"1"; 
     [parser parse]; 
     [parser release]; 
    } 
    else 
    { 
     NSLog(@"Failed to send request: %@", [error localizedDescription]); 

      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Unfornately iCloudBiz has stopped.Try Again " message:@"" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 

      [alert show]; 
      [alert release]; 
    } 

順便說...你如下

在Android中,如果網絡連接失敗,它會顯示不幸的是應用程序的名稱已終止錯誤警報提到你的Android的應用程序的行爲。

請理解這種行爲是一種不正常的行爲。這被稱爲CRASH,你應該適當地處理。如果網絡中斷應用程序應顯示一條消息,而不終止/崩潰:)

+0

但我不想在if block中做。是否有一種方法可以通過使用線程或其他任何方法來停止下一個進程? – Sindhia

+0

你的意思是你想保持它的解析功能?如果是這樣,你可以在else塊的末尾添加'return'語句。 – Atif

+0

是的,我想保留解析器和其他功能,因爲它是。我不希望他們在如果block.Instead我希望alertView被顯示,而不會繼續解析功能。它可以完成回報? – Sindhia

0

您應該使用可達類檢查互聯網連接是否可用與否 這是示例代碼,瞭解它是如何工作

Reachability *reachability = [Reachability reachabilityForInternetConnection];  
NetworkStatus internetStatus = [reachability currentReachabilityStatus]; 
if (internetStatus != NotReachable) { 
//my web-dependent code 
} 
else { 
//there-is-no-connection warning 
} 
相關問題