2012-03-07 10 views
9

xcode newbie tutaj i próbowałem dowiedzieć się, dlaczego następujące rzeczy się zdarzają ... Ze sposobem, w jaki kod jest obecnie napisany, ciągle otrzymuję "NSInvalidArgumentException" , powód: "parametr danych jest zerowy" w kodzie xcode. Adres URL działa poprawnie w przeglądarce. Kiedy usunę część adresu URL "filters =% 7B% 22region% 22% 3A% 22CA% 22% 7D", działa poprawnie w Xcode, ale kiedy ta sekcja adresu URL jest dołączona, wtedy pojawia się komunikat o błędzie . Próbowałem za pomocą \”w wymianie% 22, ale nadal nic. Wszelkie sugestie są bardzo mile widziane.'NSInvalidArgumentException', powód: 'parametr danych jest zerowy'

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

Co to jest faktyczna wartość" filtry =% 7B% 22region% 22% 3A% 22CA% 22% 7D "? – Nirmalsinh

Odpowiedz

6

Kod Państwo napisali prace bez zarzutu, ale obiekt danych kończy się nil

w pewnym momencie później w kodzie uzyskać dostęp data. Od data == nil, awarie aplikacji.

Proponuję wprowadzenie

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

i

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

do przeglądarki, aby rzucić nieco światła na sytuację

UPDATE

problem został kodowania już zakodowane ciągi. (% Są kodowane do% 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]; 

Działa, ponieważ kodujesz niezakodowany ciąg.

LUB

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

zadziała, ponieważ jak twój post jest, ciąg był już zakodowany odpowiednio

+0

kiedy wyjmuje filtry =% 7B% 22region% 22% 3A% 22CA% 22% 7D, program działa poprawnie bez awarii.Od problem musi pochodzić z filtrów =% 7B% 22region% 22% 3A% 22CA% 22% 7D czy myślisz, że xcode odczytuje% 22 jako liczbę całkowitą? – user1254909

+0

@ user1254909 Problem polegał na tym, że już zakodowałeś ten ciąg i zakodowałeś go ponownie. –

7

miałem również ten sam problem:

kończące aplikację spowodowane nieprzechwyconego wyjątku " NSInvalidArgumentException ', powód:' parametr danych jest zerowy '

Ale rozwiązałem to. Powodem jest nieprawidłowy adres URL interfejsu API. Sprawdź adres URL interfejsu API. Powodzenia!

1

Miałem ten sam problem i znalazłem jedno słowo w nazwie usługi dużymi literami, podczas gdy w rzeczywistości było to na serwerze na niższym poziomie. Poprawiłem nazwę w adresie URL i problem został rozwiązany. Dzięki.

1

Myślę, że awarię aplikacji w trybie offline i próbował NSJSONSerialization danych. Dzięki

0

Miałem ten sam problem. Odkryłem, że błąd został wygenerowany, ponieważ adres URL, którego używałem do pobrania pewnych rzeczy przy użyciu NSURLSession, stał się nieprawidłowy. Usunięcie operacji rozwiązało problem.

1

w moim przypadku
zapomniałem dodać „App Ustawienia bezpieczeństwa transportu” w „.plist”
wystarczy udać się do”.plist "i dodaj" Ustawienia zabezpieczeń aplikacji do transportu ", a następnie" Zezwalaj na ładunki arbitralne "na tak
zadziałało dla mnie

Powiązane problemy