为什么在iOS 6.1而不是7.1上,获取Twitter追随者的请求会崩溃

为什么在iOS 6.1而不是7.1上,获取Twitter追随者的请求会崩溃,ios,objective-c,cocoa-touch,twitter,ios6,Ios,Objective C,Cocoa Touch,Twitter,Ios6,我试图加载该用户的Twitter追随者列表。它在iOS 7.1上可以正常加载,但在iOS 6.1上崩溃。崩溃的行是performRequestWithHandler:,错误是-[\uu NSCFNumber length]:发送到实例0xcb4d580的无法识别的选择器。问题的原因是什么 SLRequest* request = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:TWReques

我试图加载该用户的Twitter追随者列表。它在iOS 7.1上可以正常加载,但在iOS 6.1上崩溃。崩溃的行是
performRequestWithHandler:
,错误是-[\uu NSCFNumber length]:发送到实例0xcb4d580的无法识别的选择器。问题的原因是什么

SLRequest* request = [SLRequest
    requestForServiceType:SLServiceTypeTwitter
    requestMethod:TWRequestMethodGET
    URL:[NSURL URLWithString:[NSString stringWithFormat:
        @"%@followers/list.json",
        API_BASE_URL
    ]]
    parameters:@{
        @"user_id": @(self.context.userId.integerValue),
        @"count": @(128),
        @"skip_status": @"true"
    }
];
request.account = self.context.account;
[request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
    // code that is irrelevant to crash
}];
上述变量是如何定义的:

  • API_BASE_URL是静态NSString@“”
  • self.context.userId是一个数字字符串
  • self.context.account是登录用户的帐户

如果在iOS 6下出现错误消息,您必须确保所有请求参数都是字符串。将参数的代码更改为类似以下内容:

parameters:@{
    @"user_id": self.context.userId,
    @"count": @"128",
    @"skip_status": @"true"
}

请指出导致崩溃的确切代码行。@rmaddy:是的。这是
performRequestWithHandler:
行。好的,它确实在那一行,而不是在处理程序中。我猜问题是由
count
参数是
NSNumber
而不是
NSString
引起的。将
@(128)
更改为
@“128”
。同时将
用户id
设为字符串而不是数字。@rmaddy。它是请求行,而不是处理程序,因为它在处理之前就崩溃了。你说得对。iOS 6的内部实现要求所有参数都是NSString。iOS 7可以智能地将NSNumber转换为字符串。你可以提交你的答案,我会接受的。