2013-01-03 34 views
5

SBJson ayrıştırıcısına sahip yeni bir projeye başlıyorum, bu kullanıcılar yeni iOS projeleri için internette en iyisi olarak öneriliyor. Stug Brautaset'in current release (3.1) üzerinde kullanabileceğinizi iddia ettiği mevcut yöntemlerin, kullanımdan kaldırılmış gibi göründüğü ya da en azından derleyicimin söyledikleri gibi gerçekten bir sorun sorunu yaşıyorum. İşe ya almak gibi olamaz:SBJson iOS ayrıştırıcı yöntemleri kullanımdan kaldırıldı mı?

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

ayrıştırıcı bir sbjson ayrıştırıcısıdır: görünüyor

NSDictionary *dict = [responseString JSONValue]; 

şu ya da yapmak en güncel şekilde olması. XCode, bu işlevlerin her ikisini de vurgular ve kullanımdan kaldırıldığını söyler.

Burada ne yapıyorum ??

+2

Neden elma NSJSONSerialization sınıfını kullanmıyorsun? –

+0

[JSONKit] (https://github.com/johnezang/JSONKit/) en iyi çözümleyicidir. IOS 5.0 ve üstü ile harici kod ve hedef cihazlar kullanmak istemiyorsanız NSJSONSerialization tamamdır. – mspasov

+0

iOS4.x ve aşağıdakileri umursamıyorsanız (ve yeni projeler için kim yapar?) Özellikle akış desteğine ihtiyacınız olmadıkça NSJSONSerialization'ı öneririm. Ancak, SBJson'un şu anki versiyonu 3.2'dir ve bahsettiğiniz yöntemlerin kullanımdan kaldırılması [iyi belgelenmiştir] (http://sbjson.org/news/2013/sbjson-v3.2.html). –

cevap

9

kaynak kodu here ve here bakıldığında her iki

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

ve

- (id)JSONValue; 

sürüm 3.2 beri kaldırıldığını ve bu sürüm 4.0 kaldırılır olacağını görünüyor. 3.1 kullandığınızdan emin misiniz? Her iki

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

ve

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

görünüm mevcut değil kaldırılan Öte yandan

.

Bunun yerine bunları kullanmanızı öneririm.

Bir alternatif Apple tarafından sağlanan NSJSONSerialization sınıfını kullanmaktır.

+0

Teşekkürler, NSJSONSerialization kullanarak bitti. SBJson ile anlaşma ne olduğundan emin değilim, ama kesinlikle en yeni versiyonu vardı. Belgeleme, orada oldukça kabataslaktır – Jameo

+0

Görünüşe göre 3.2 olan daha yeni sürüme sahip oldunuz. Bir dokümantasyon yok, ancak bu yüzden kullanımdan kaldırma uyarısını görmediniz. –

+0

Tam olarak hangi belgeler eksik? (Sadece bunu geliştirebilmem için rica ediyorum.) Bkz. Http://sbjson.org/news/2013/sbjson-v3.2.html ve ör. Buradaki uyarı: http://sbjson.org/api/3.2/Classes/SBJsonParser.html#//api/name/objectWithString:error: –

0

Sadece bir şeyi kendi kendine xcode ile kolayca çözebilmenin genel bir yolu. Herhangi bir kod satırı kullanılmadığında, klavyenizdeki "alt" tuşunu basılı tutmak ve konuyu yükselterek nesneyi taşımak ve tıklamak en iyisidir. Xcode daha sonra kodunuzu yazmanın daha iyi bir yolunu önerir. Umut bu

+0

SBJson kullanımdan kaldırmaya uygulanmaz: bunun için öneri yoktur. –

0

deneyin değiştirmek için yardımcı olur:

NSDictionary *dict = [responseString JSONValue]; 

olarak:

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

Ya da daha:

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; 
İlgili konular