2012-03-07 2 views
9

xcode новичок здесь, и я пытался выяснить, почему происходит следующее ... С тем, как в настоящее время написан код, я продолжаю получать 'NSInvalidArgumentException' , причина: «параметр данных равен нулю» в xcode. В браузере он отлично работает. Когда я удаляю часть URL-адреса «filters =% 7B% 22region% 22% 3A% 22CA% 22% 7D», он отлично работает в xcode, но когда этот раздел URL-адреса включен, вот когда я получаю сообщение об ошибке , Я попытался с помощью \»в замене% 22, но до сих пор ничего. Любые предложения, высоко оценили.'NSInvalidArgumentException', причина: 'data parameter is nil'

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]; 
+0

Что представляет собой фактическое значение для« filters =% 7B% 22region% 22% 3A% 22CA% 22% 7D «? – Nirmalsinh

ответ

6

Код, который вы выложили работу без сбоев, но объект данных заканчивается время 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

Проблема была кодировка уже закодированные строк. (В% 's в настоящее время закодирован% 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]; 

Works, потому что вы кодирующий не закодированную строку.

ИЛИ

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]; 

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

+0

, когда я вынимаю фильтры =% 7B% 22region% 22% 3A% 22CA% 22% 7D, программа отлично работает без сбоев. Проблема должна исходить от фильтров =% 7B% 22region% 22% 3A% 22CA% 22% 7D? Вы считаете, что xcode читает% 22 как целое число? – user1254909

+0

@ user1254909 Проблема заключалась в том, что уже закодирована строка и ее кодировка снова. –

7

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

, истекающий приложение из-за неперехваченного исключением ' NSInvalidArgumentException ', причина:' параметр данных - nil '

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

1

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

1

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

0

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

1

в моем случае
я забыл добавить «App транспорта Настройки безопасности» в «.plist»
просто пойти на».plist "и добавьте« Настройки безопасности прихода в приложении », а затем« Разрешить произвольные нагрузки », да
это сработало для меня

Смежные вопросы