Как справиться с сбоем NSJSONSerialization при отключении от интернета

Я реализую веб-сервис в своем приложении. Мой путь типичен.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //Web Service xxx,yyy are not true data NSString *urlString = @"http://xxx.byethost17.com/yyy"; NSURL *url = [NSURL URLWithString:urlString]; dispatch_async(kBackGroudQueue, ^{ NSData* data = [NSData dataWithContentsOfURL: url]; [self performSelectorOnMainThread:@selector(receiveLatest:) withObject:data waitUntilDone:YES]; }); return YES; } - (void)receiveLatest:(NSData *)responseData { //parse out the json data NSError* error; NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]; NSString *Draw_539 = [json objectForKey:@"Draw_539"]; .... 

сообщение об ошибке консоли:

* Завершение приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: «параметр данных равен нулю»

Когда мой iphone имеет подключение к Интернету, приложение работает успешно. Но если он отключится от Интернета, приложение столкнется с NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]; Можете ли вы показать мне, как справиться с этой ошибкой? NSError ли NSError ?

2 Solutions collect form web for “Как справиться с сбоем NSJSONSerialization при отключении от интернета”

Ошибка сообщает вам, что «responseData» равен нулю. Способ избежать исключения – проверить «responseData» и не вызывать JSONObjectWithData, если он равен нулю. Вместо этого отреагируйте, однако вы чувствуете, что вам нужно это условие ошибки.

Вы не проверяете, является ли ваш responseData нулем или нет, прежде чем передавать его в JSONObjectWithData:options:error: method.

Вероятно, вы должны попробовать:

 - (void)receiveLatest:(NSData *)responseData { //parse out the json data NSError* error; if(responseData != nil) { NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]; NSString *Draw_539 = [json objectForKey:@"Draw_539"]; } else { //Handle error or alert user here } .... } 

EDIT-1: Для хорошей практики вы должны проверить этот объект error после JSONObjectWithData:options:error: метод для проверки и проверить, успешно ли данные JSON преобразованы в NSDictionary или нет.

 - (void)receiveLatest:(NSData *)responseData { //parse out the json data NSError* error; if(responseData != nil) { NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]; if(!error) { NSString *Draw_539 = [json objectForKey:@"Draw_539"]; } else { NSLog(@"Error: %@", [error localizedDescription]); //Do additional data manipulation or handling work here. } } else { //Handle error or alert user here } .... } 

Надеюсь, это решит вашу проблему.

Дай мне знать, если тебе еще понадобится помощь.

  • Серийная сериализация NSJSONSerialization строки, содержащей косые черты / и HTML, выполняется неправильно
  • Сериализовать настраиваемый объект для JSON, который содержит NSMutableArray
  • NSJSONSerialization возвращает строку "<null>"
  • iOS JSON Parse не работает (возвращает нулевой словарь)
  • Swift Dynamic Cast не удалось выполнить NSJSONSerialization
  • iOS-Swift: Сериализовать NSManagedObject для JSON (с отношениями)
  • Получение ошибки в анализе JSON с массивом в iOS
  • Параметр базы данных AFNetworking, символы, которые экранируются NSJSONSerialization
  • JSON to NSDictionary literal
  • iOS NSJSON Возвращает нуль
  • Объект является подклассом NSMutableDictionary, но сбой при методе мутации (NSJSONSerialization)
  • Interesting Posts

    Исправленная собственность работает в iOS5, но не iOS6

    Как программный выбор начальной панели вкладок

    как защитить приложение iOS от взлома?

    Как узнать фокусное расстояние камеры в ios и какова высота датчика?

    UICollectionView с несколькими подклассами UICollectionViewCell

    Строка Html, установленная в UILabel

    Установка плагинов продолжает сбой из-за es6-prepare-plugin

    Как создать версию версии iOS в Xcode?

    Пользовательский селектор для NSSortDescriptor и NSFetchedResultsController

    IO6 не вызывает – (BOOL) shouldAutorotate

    Добавление UIVisualEffectView в фоновый просмотр UITableView работает только на симуляторе, а не на устройстве

    Настройка navigationController.hidesBarsOnSwipe = YES никогда не показывает мой навигатор снова

    Мое приложение использует шифрование (только брелок)?

    Swift Decodable: как преобразовать один из значений во время декодирования?

    Сгруппированное UITableView значение угла по умолчанию

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.