NSInvalidArgumentException, причина: «параметр данных равен nil» - PullRequest
9 голосов
/ 07 марта 2012

Новичок XCode здесь, и я пытался выяснить, почему происходит следующее ...

С тем, как код написан в настоящее время, я продолжаю получать NSInvalidArgumentException.

причина: «параметр данных равен nil» в xcode.URL отлично работает в браузере.

Когда я удаляю часть «filters =% 7B% 22region% 22% 3A% 22CA% 22% 7D» url, он отлично работает в Xcode, но когда этот раздел URLвключается, вот когда я получаю сообщение об ошибке.Я пытался использовать \ "вместо% 22, но все еще ничего. Любые предложения очень ценятся.

NSURL *url = [NSURL URLWithString:[@"http://api.v3.factual.com/t/restaurants-us?q=peets+coffee&filters=%7B%22region%22%3A%22CA%22%7D&KEY=p7kwKMFUSyVi64FxnqWmeSDEI41kzE3vNWmwY9Zi"stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSData *data = [NSData dataWithContentsOfURL: url];

Ответы [ 6 ]

7 голосов
/ 17 июля 2012

У меня тоже была такая же проблема:

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

Но я решил это. Причина в том, что мой API неверный URL. Пожалуйста, проверьте ваш API URL. Удачи тебе!

6 голосов
/ 07 марта 2012

Код, который вы опубликовали, работает без сбоев, но объект данных в итоге становится nil

В какой-то момент позже в коде вы получите доступ к data. С data == nil приложение вылетает.

Я предлагаю ввести

http://api.v3.factual.com/t/restaurants-us?q=peets+coffee&filters=%7B%22region%22%3A%22CA%22%7D&KEY=p7kwKMFUSyVi64FxnqWmeSDEI41kzE3vNWmwY9Zi

и

http://api.v3.factual.com/t/restaurants-us?q=peets+coffee&KEY=p7kwKMFUSyVi64FxnqWmeSDEI41kzE3vNWmwY9Zi

в браузер, чтобы пролить свет на ситуацию

UPDATE

Проблема заключалась в кодировании уже закодированных строк. (% Кодируются в% 25)

NSString *urlBase = @"http://api.v3.factual.com/t/restaurants-us?";
NSString *urlData = [@"q=peets+coffee&filters={\"region\":\"CA\"}&KEY=p7kwKMFUSyVi64FxnqWmeSDEI41kzE3vNWmwY9Zi"stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"%@%@",urlBase,urlData]];
NSData* data = [NSData dataWithContentsOfURL: url];

Работает, потому что вы кодируете некодированную строку.

OR

NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"http://api.v3.factual.com/t/restaurants-us?q=peets+coffee&filters=%7B%22region%22%3A%22CA%22%7D&KEY=p7kwKMFUSyVi64FxnqWmeSDEI41kzE3vNWmwY9Zi"]];
NSData* data = [NSData dataWithContentsOfURL: url];

Будет работать, потому что, как ваш пост, ваша строка уже была правильно закодирована

1 голос
/ 13 февраля 2017

В моем случае я забыл добавить App Transport Security Settings в .plist.

Так что просто перейдите к .plist и добавьте App Transport Security Settings, а затем Allow Arbitrary Loads к да.

1 голос
/ 27 апреля 2015

Я думаю, что приложение не работает в автономном режиме, и вы попытались NSJSONSerialization данных.Спасибо

1 голос
/ 31 января 2014

У меня была такая же проблема, и я нашел одно слово в имени службы в верхнем регистре, хотя на самом деле оно было в нижнем регистре на сервере.Я исправил имя в URL, и проблема была решена.Спасибо.

0 голосов
/ 02 января 2016

У меня была такая же проблема.Я обнаружил, что произошла ошибка, потому что URL-адрес, который я использовал для загрузки некоторых материалов с помощью NSURLSession, стал недействительным.Удаление операции решило проблему для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...