2013-09-01 14 views
1

Когда я запускаю свое приложение в симуляторе, все работает отлично. Но когда я запускаю одно и то же приложение в исключении Ipad, вы бросаете.ОК в симуляторе, но исключение исключения в устройстве ios

Завершение работы приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: «параметр данных - nil. В моем приложении на одном шаге я должен запросить web-URl и вам нужно проанализировать возвращенный ответ JSON. Но я проверил web-url и смог отлично разбираться в симуляторе. Но вся проблема возникла в реальном устройстве ios. Но я думаю, что я определил код, где он ошибается.

+ (NSDictionary*) getParsedJSON:(NSString*) urlString { 
NSLog(@"################################################################################"); 
NSLog(@"getParsedJSON => urlString:"); 
NSLog(@"%@", urlString); 

NSURL* url = [NSURL URLWithString:urlString]; 
NSURLRequest* request = [NSURLRequest requestWithURL:url]; 

NSURLResponse *response1 = nil; 
NSError *error = nil; 

NSData* response = [NSURLConnection sendSynchronousRequest:request returningResponse:&response1 error:&error]; 

//NSData* response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
NSLog(@"--------------------------------------------------------------------------------"); 
NSString* responseString = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding]; 
NSLog(@"getParsedJSON => responseString:\n%@", responseString); 
NSLog(@"--------------------------------------------------------------------------------"); 
NSError* jsonParsingError = nil; 
NSDictionary* parsedJSON = [NSJSONSerialization JSONObjectWithData:response options:0 error:&jsonParsingError]; // here is place where exception seems to be thrown. 
if (jsonParsingError) { 
    NSLog(@"ERROR in parsing JSON: %@", jsonParsingError); 
} else { 
    NSLog(@"getParsedJSON => parsedJSON: \n%@", [parsedJSON description]); 
} 
NSLog(@"################################################################################");  
return parsedJSON; 

}

Я определил линию, где он, кажется, неправильно .Я также прилагается снимок экрана отчета об исключении. screenshot of the console. Хостинг для вашего опытного ответа.

+1

Вы можете проверить, нет ли ошибки после отправки запроса. Если это не так, напечатайте ошибку userInfo, чтобы узнать, что происходит. – serrrgi

+0

Вы также должны проверить, что 'sendSynchronousRequest' не равен нулю. – Wain

+0

@serrrgi Я уже проверил, если ошибка равна нулю. Но, как я сказал, вся проблема, кажется, в децибе – sujat

ответ

1

Как видно из журналов, ваша строка ответа равна null, пока вы используете ее на своем устройстве. Это может быть связано с проблемой интернет-доступа. Попробуйте использовать:

if([response isequaltostring:@"(null)"]||response == nil || response.length == 0) 
{ 
NSError* jsonParsingError = nil; 
NSDictionary* parsedJSON = [NSJSONSerialization JSONObjectWithData:response options:0 error:&jsonParsingError]; // here is place where exception seems to be thrown. 
if (jsonParsingError) { 
NSLog(@"ERROR in parsing JSON: %@", jsonParsingError); 
} 
else { 
NSLog(@"getParsedJSON => parsedJSON: \n%@", [parsedJSON description]); 
    } 
} 

Также попробуйте добавить исключительную точку останова и сообщение, где именно приложение разбилось. Сообщите мне результат.

1

Во-первых, вам нужно установить контрольную точку исключения в Xcode - здесь есть много сообщений о том, как это сделать. Во-вторых, после того, как каждый из вас заявления, когда объект создается или вернувшихся, добавьте утверждать, что:

NSURL *foo = ... 
assert(foo); 

Делать это поможет вам найти первый вопрос не последний.

0

В соответствии с вашими журналами строка ответа пуста!

Сделайте следующие две вещи!

  • Добавить NSLog (@ "Response Data:% @", response); и проверить, имеет ли ответ значение?
  • Если «response» имеет значение, преобразуйте его в строку - зарегистрируйте строковое значение - и проверьте, имеет ли значение ключа значение nil?

Метод NSJSONSerialization JSONObjectWithData будет сбой, если он найдет любой ключ с нулевым значением.