2013-01-03 15 views
5

Zaczynam nowy projekt z parserem SBJson, który ludzie wydają się polecać jako najlepszy w Internecie dla nowych projektów iOS. Mam naprawdę problem ze skalowaniem, który jest taki, że obecne metody Stig Brautaset twierdzą, że można użyć na current release (3.1), wydają się być przestarzałe, a przynajmniej to, co mówi mój kompilator. I cant wydają się zarówno do pracy:Metody analizatora składni SBJson iOS są przestarzałe?

NSDictionary *dict = [responseString JSONValue]; 

który wydaje się być najbardziej aktualny sposobem na to, czy:

NSDictionary *dict = [parser objectWithString:responseString error:&error]; 

Gdzie jest parser parser sbjson. XCode podświetla obie te funkcje i informuje mnie, że są przestarzałe.

Co ja tu robię źle?

+2

Dlaczego nie można użyć klasy Apple NSJSONSerialization? –

+0

[JSONKit] (https://github.com/johnezang/JSONKit/) jest najlepszym parserem. NSJSONSerialization jest ok, jeśli nie chcesz używać zewnętrznego kodu i urządzeń docelowych z systemem iOS 5.0 i nowszym. – mspasov

+0

Jeśli nie dbasz o iOS4.x i poniżej (i kto robi, w przypadku nowych projektów?), Polecam NSJSONSerialization, chyba że potrzebujesz wsparcia strumieniowego. Jednak obecna wersja SBJson jest w rzeczywistości 3.2, a wycofanie metod, o których wspomniałeś, jest [dobrze udokumentowane] (http://sbjson.org/news/2013/sbjson-v3.2.html). –

Odpowiedz

9

Patrząc na kod źródłowy here i here wygląda, że ​​zarówno

- (id)objectWithString:(NSString*)jsonText error:(NSError**)error 

i

- (id)JSONValue; 

są przestarzałe od wersji 3.2 i zostanie on usunięty w wersji 4.0. Czy jesteś pewien, że używasz wersji 3.1?

Z drugiej strony dostępnej zarówno

- (id)objectWithString:(NSString *)repr; 

i

- (id)objectWithData:(NSData*)data; 

wygląd i nie przestarzałe.

Proponuję użyć ich zamiast tego. Możliwe jest użycie klasy NSJSONSerialization dostarczonej przez firmę Apple.

+0

Dzięki, skończyłem za pomocą NSJSONSerialization. Nie jestem pewien, co to jest umowa z SBJson, ale zdecydowanie miałem najnowszą wersję. Dokumentacja jest dość szkicowa tam – Jameo

+0

Miałeś nowszą wersję, która najwyraźniej jest wersją 3.2. Brakuje w nim dokumentacji, dlatego nie widzisz ostrzeżenia o wycofaniu. –

+0

Jakiej dokumentacji brakuje dokładnie? (Pytam tylko, abym mógł go poprawić.) Zobacz http://sbjson.org/news/2013/sbjson-v3.2.html i np. ostrzeżenie: http://sbjson.org/api/3.2/Classes/SBJsonParser.html#//api/name/objectWithString:error: –

0

Po prostu ogólny sposób na łatwe rozwiązywanie problemów za pomocą samego kodu xcode. Kiedy dowolna linia kodu jest przestarzała, najlepiej trzymać klawisz "alt" na klawiaturze i przesuwać się nad obiektem podnoszącym problem i klikać. Xcode sugeruje lepszy sposób napisania kodu. Nadzieja to pomaga

+0

Nie dotyczy wycofania SBJson: brak sugestii. –

0

Spróbuj wymienić:

NSDictionary *dict = [responseString JSONValue]; 

Z:

NSDictionary *dict = [[SBJsonParser new] objectWithString:responseString]; 

Albo lepiej:

SBJsonParser *parser = [SBJsonParser new]; 
id object = [parser objectWithString:responseString]; 
if (parser.error || ![object isKindOfClass:[NSDictionary self]]) 
    @throw parser.error ?: @"not a json dictionary";// or any error handling alternative 
NSDictionary *dict = object; 
Powiązane problemy