【问题标题】:Parsing Twitter feed: -[__NSCFString objectForKey:]解析 Twitter 提要:-[__NSCFString objectForKey:]
【发布时间】:2012-04-02 22:26:00
【问题描述】:

我解决了一些用户在我的应用从 Twitter 加载 JSON 时遇到的错误:

-[__NSCFString objectForKey:] unrecognized selector

经过研究,我认为问题是使用 NSDictionary 而不是 NSArray 的结果。但是,我的问题是,为什么某些使用完全相同的设备和 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;
 }

【问题讨论】:

  • 哇...在 Hades 中我们如何在没有代码的情况下诊断代码?
  • 好吧,我认为这个问题有点笼统,因为我已经解决了错误,但是,我已经添加了代码
  • 您没有发布您的解决方案,但我猜:您将 objectForKey 发送到状态,而不是状态,对吧? Xcode 自动完成功能是编程中发生过的最好和最糟糕的事情。
  • @danh 我将状态从 NSDictionary 更改为 NSArray,因为它没有任何键

标签: iphone objective-c ios json twitter


【解决方案1】:

这取决于output 中的数据来自哪里。您假设您的 JSON 数据是一个字典数组,但服务器可能会返回其他内容,例如,如果发生错误,服务器可能会返回包含一些错误信息的字典。

您必须查看 Twitter API 以了解您可能会收到此特定调用的哪些数据。

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

查看上面的页面,你可以使用HTTP返回码来查看请求是否失败,如果是这种情况,你可以中止这个操作。

【讨论】:

  • 因此,例如,如果由于服务器繁忙或错误而收到 503,它肯定会崩溃......这是有道理的
【解决方案2】:

我的猜测是软件相同,但数据不同。

看看你是否能找出被要求的密钥。

您可能会发现一些记录的 json 在该键处有一个数组(也许,当有多个关系时),有些有一个字典(用于与单个对象的关系)。

我想不出 twitter api 中的任何地方都是这种情况,但这是有道理的。

【讨论】:

  • 是的,它来自同一个用户的提要,没有新的推文,但是,数据可能存在差异(可能是转发标志等)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
相关资源
最近更新 更多