2011-07-29 2 views
1

Мое приложение должно получать данные с веб-страницы, которая находится в формате XML. Я использую XMLReader, чтобы сделать это, и функция работает, когда есть доступ к интернету, однако конкретная линияОшибка XMLReader при отсутствии подключения к Интернету

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

аварии, когда нет интернета. Я хочу, чтобы приложение распечатывало сообщение об ошибке, когда нет Интернета. Таким образом, я использую ** 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

Проверьте наличие «полученных данных» перед использованием.

// 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]; 
     } 
Смежные вопросы