2011-07-29 18 views
1

私のアプリはXML形式のウェブページからデータを取得する必要があります。しかし、特定の行インターネットに接続していないとXMLReaderがクラッシュする

NSArray *arr = [XMLReader objectsForXMLData:receivedData error:parseError]; 

クラッシュを何もインターネットが存在しない、私はこれを行うにするXMLReaderを使用していますし、インターネットアクセスがある場合に機能が素晴らしい作品。私は、インターネットが存在しないときに、アプリケーションにエラーメッセージを表示させたい。したがって、私は指標として** parseErrorを使用しています。しかし、私はこの行を実行すると、アプリケーションがクラッシュする理由は不明です。私は以下の機能を掲載しました。ご協力いただきありがとうございます。

NSDateFormatter *dateFmt = [[NSDateFormatter alloc] init]; 
dateFmt.timeStyle = NSDateFormatterNoStyle; 
dateFmt.dateFormat = DATADATEFRMT; // @"yyyy-MM-dd"; 
NSMutableString *urlStr = [NSMutableString stringWithString:[DATASRCWCAT stringByAppendingString:cat]]; 
category = cat; 
NSLog(@"cate = %@",cat); 
[urlStr appendFormat:@"%@%@%@%@", DATAPRD, dataPeriod, DATASTDATE, [dateFmt stringFromDate:currDate]]; 
NSLog(@"dataPeriod = %@", [dateFmt stringFromDate:currDate]); 
NSString *urlString = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

//NSLog(@"URL to obtain data: %@", urlString); 

self.crimeid = cat; 

// Get the data in xml format and parse 
NSData *receivedData = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]]; 
NSError **parseError = nil; 
NSArray *arr = [XMLReader objectsForXMLData:receivedData error:parseError]; // <---- crashes here with no internet access. 
//NSLog(@"array = %@", [arr objectAtIndex:1]); 
self.crimeDataArray = arr; 

答えて

3

使用する前に「receivedData」が存在するかどうかを確認してください。

// Get the data in xml format and parse 

NSData *receivedData = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]]; 

if (receivedData) // Will only get here if there's data 
{ 
    NSError **parseError = nil; 
    NSArray *arr = [XMLReader objectsForXMLData:receivedData error:parseError]; // <---- crashes here with no internet access. 
    //NSLog(@"array = %@", [arr objectAtIndex:1]); 
    self.crimeDataArray = arr; 
} 
+0

ありがとう、それはそれを解決しました。 – John

1

インターネット接続がない場合は例外を受け取りますが、try/catchで例外を処理できます。私はそれが正しい方法だと思う。

@try { 
      NSData *data= [NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]]; 
      NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 

      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Conection found",nil) message:@"Conection found" delegate:nil cancelButtonTitle:NSLocalizedString(@"Ok",nil) otherButtonTitles:nil ,nil]; 
      [alert show]; 
     } 
     @catch (NSException *exception) { 
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"NO Conection found" message:@"No Conection found" delegate:nil cancelButtonTitle:NSLocalizedString(@"Ok",nil) otherButtonTitles:nil ,nil]; 
      [alert show]; 
     } 
関連する問題