2013-01-03 92 views
5

我開始使用SBJson解析器創建一個新項目,人們似乎推薦將其作爲Internet上最好的iOS項目。我遇到了一個非常棘手的問題,那就是目前的方法Stig Brautaset聲稱你可以在current release (3.1)上使用,似乎已被棄用,或者至少這就是我的編譯器所說的。我似乎無法得到任何工作:SBJson iOS解析器方法已棄用?

NSDictionary *dict = [responseString JSONValue]; 

這似乎是做這做的最新的方法:

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

如果解析器是sbjson解析器。 XCode突出顯示了這些功能,並告訴我它們已被棄用。

我在做什麼錯在這裏?

+2

你爲什麼不使用蘋果的NSJSONSerialization類? –

+0

[JSONKit](https://github.com/johnezang/JSONKit/)是最好的解析器。如果您不想在iOS 5.0及更高版本中使用外部代碼和目標設備,則可以使用NSJSONSerialization。 – mspasov

+0

如果你不關心iOS4.x和以下版本(以及誰爲新項目?),我建議使用NSJSONSerialization,除非你特別需要流支持。然而,SBJson的當前版本實際上是3.2,並且您提及的方法的棄用[已有文獻記載](http://sbjson.org/news/2013/sbjson-v3.2.html)。 –

回答

9

查看源代碼herehere它看起來既

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

- (id)JSONValue; 

是因爲3.2版本過時,它會在4.0版本中移除。 你確定你使用的是3.1嗎?

另外兩個

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

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

外觀可用,不會被棄用。

我建議你改用它們。

另一種方法是使用Apple提供的NSJSONSerialization類。

+0

謝謝,我結束了使用NSJSONSerialization。不確定與SBJson的交易是什麼,但我肯定有最新版本。該文檔在那裏是粗略的 – Jameo

+0

你有更新的版本,顯然是3.2。但是它缺少文檔,這就是爲什麼你沒有看到棄用警告的原因。 –

+0

什麼文檔完全缺乏? (我只問,所以我可以改進它。)請參閱http://sbjson.org/news/2013/sbjson-v3.2.html和這裏的警告:http://sbjson.org/api/3.2/Classes/SBJsonParser.html#//api/name/objectWithString:error: –

0

只是一個通用的方式來讓事情輕鬆地用xcode自己解決。 每當任何代碼行被棄用時,最好按住鍵盤上的「alt」鍵並移動到引發問題的對象上並單擊。 Xcode然後建議更好的方式來編寫你的代碼。 希望這有助於

+0

不適用於SBJson棄用:沒有建議。 –

0

嘗試更換:

NSDictionary *dict = [responseString JSONValue]; 

有了:

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

或者更好:

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;