2012-03-17 136 views
-1

每當我的應用程序加載JSON從Twitter我已經解決了錯誤我的一些用戶正經歷:解析Twitter的飼料: - [__ NSCFString objectForKey:]

-[__NSCFString objectForKey:] unrecognized selector 

經過研究,我相信這個問題是結果使用NSDictionary而不是NSArray。然而,我的問題是爲什麼一些使用EXACT相同設備和iOS版本的用戶會間歇性地遇到錯誤?爲什麼不是每次都會出錯或者從不出錯?這是否與設備上正在使用的內存有關或者從服務器接收數據中斷?

編輯:

//I have since changed statuses to an NSArray 
NSDictionary *statuses = [[NSDictionary alloc] init]; 

statuses = [output JSONValue]; 

for (NSDictionary *status in statuses) 
{ 
      Tweets *aTweet = [[Tweets alloc] init]; 

      //error began (fatal error) on following line 
      aTweet.text = [status objectForKey:@"text"]; 
      aTweet.created_at = [status objectForKey:@"created_at"]; 
      aTweet.created_date = [dateImporter dateFromString:aTweet.created_at]; 

      [self.tweets addObject:aTweet]; 

      aTweet = nil; 
} 
+1

哇...在地獄,我們怎麼會沒有診斷代碼代碼? – CodaFi 2012-03-17 19:57:38

+0

嗯,我認爲這個問題更多的是一個普遍的問題,因爲我已經解決了錯誤,但是,我已經添加了代碼 – 2012-03-17 20:01:16

+0

你沒有發佈你的解決方案,但我會猜測:你發送了該objectForKey狀態,而不是狀態,對不對? Xcode自動完成是編程中發生的最好也是最糟糕的事情。 – danh 2012-03-17 20:04:32

回答

0

這要看在output數據的來源。你保證你的JSON數據是一個字典數組,但是服務器可能返回其他東西,例如,如果發生了錯誤,服務器可能會返回一個帶有一些錯誤信息的字典。

你必須看看Twitter的API,看看您可能會收到什麼樣的數據爲這個特殊的電話。

https://dev.twitter.com/docs/error-codes-responses

看看上面的頁面,你可以使用HTTP返回代碼,以查看該請求是否已經失敗,如果是這樣的話,你可以取消這個操作。

+0

因此,例如,如果因爲服務器繁忙或出現錯誤而收到503,它肯定會崩潰......這是有道理的 – 2012-03-17 20:06:31

0

我的猜測是,該軟件是一樣的,但數據是不同的。

看看你能不能發現什麼是被要求的關鍵。

你可能會發現,一些記錄JSON在該鍵有一個數組(也許,當有一個以上的關係),有的還有一本字典(針對單個對象的關係)。

我想不出在Twitter的API,其中是這樣的話任何地方,但它按理說。

+0

是的,它來自同一用戶的feed,沒有新的推文,但是,可能存在數據差異(可能是轉推國旗等) – 2012-03-17 20:04:20