2011-10-20 47 views
0

我試圖用NSJSONSerialization連載從堆棧溢出API返回的數據,但它並不如預期運行:(NSJSONSerialization不工作

我如下使用代碼:

NSURL *apiURL = [NSURL URLWithString:@"http://api.stackoverflow.com/1.1/questions?tagged=objective-c&pagesize=30"]; 

NSError *error = nil; 

// First option - failed 
NSInputStream *inputStream = [NSInputStream inputStreamWithURL:apiURL]; // returning nil 
id jsonFound1 = [NSJSONSerialization JSONObjectWithStream:inputStream options:NSJSONReadingMutableContainers error:&error]; 

// Second option - failed 
NSData *jsonData = [NSData dataWithContentsOfURL:apiURL]; // returning correct value, verified after converting it to NSString 

id jsonFound2 = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error]; // returning nil 

我想在Xcode 4.2的iOS5上面的代碼和我得到(空)爲的inputStreamjsonFound2

之前我是通過SBJSON來完成的,它工作正常。

任何人都可以建議我,如果我做任何錯誤或錯過什麼?

+0

如果'inputStream'是'nil',那麼其他一切都會失敗。這不是'NSJSONSerialization'的問題;這是您流的問題。你確定'+ [NSInputStream inputStreamWithURL:]'適用於遠程URL嗎? – 2011-10-20 08:12:48

+0

好吧..我會檢查它..也試過第二個選項,通過從apiURL獲取數據,然後使用JSONObjectWithData:options:error,在這種情況下,我也得到零無線:(。任何線索? – Devarshi

+0

什麼'error'輸出參數包含? – 2011-10-20 08:30:25

回答

0

第一個選項不起作用,因爲它只支持文件url(感謝David的指點)。

第二個選項適用於遠程網址。

+0

上面的代碼無法正常工作,「NSInputStream * inputStream = [NSInputStream inputStreamWithURL:apiURL];」只支持文件的URL – David

+0

感謝指點.. :-)更新了我的答案! – Devarshi

2

我認爲在分配inputStream後可能會有缺失的步驟。

[inputStream open]; 

我還沒有嘗試過使用遠程URL,但已經看到使用這種方法的示例。