2012-03-17 90 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