2012-04-10 73 views
20

这个错误是什么意思?[__NSCFNumber length]:无法识别的选择器发送到实例0x6d21350

[__NSCFNumber length]: unrecognized selector sent to instance 0x6d21350 

这里是我的代码:

NSString *urlString = @"http://api.twitter.com/1/statuses/update.json"; 
    NSURL *url = [NSURL URLWithString:urlString]; 

    NSMutableDictionary *params = [[NSMutableDictionary alloc] init]; 
    [params setObject:status forKey:@"status"]; 
    [params setObject:replyToID forKey:@"in_reply_to_status_id"]; 
    [params setObject:@"1" forKey:@"include_entities"]; 

    // Build the request with our parameter 
    TWRequest *request = [[TWRequest alloc] initWithURL:url parameters:params requestMethod:TWRequestMethodPOST]; 

    // Attach the account object to this request 
    [request setAccount:twitterAccount]; 

    [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { 
     if (!responseData) { 
      // inspect the contents of error 
      NSLog(@"%@", [error localizedDescription]); 

      self.alert = [[UIAlertView alloc] initWithTitle:@"HTTP error" message:@"I could not connect to the Twitter API." delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; 
      [self.alert show]; 

      [self.replyDelegate replyRequestSuccessful:NO]; 
     } 
     else { 
      /*NSString *responseDataAsString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
      NSLog(responseDataAsString);*/ 

      NSError *error; 
      NSArray *replyResponse = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableLeaves error:&error]; 

      if (!replyResponse) { 
       NSLog(@"%@", [error localizedDescription]); 

       self.alert = [[UIAlertView alloc] initWithTitle:@"JSON error" message:@"I could not parse the JSON response from the Twitter API." delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; 
       [self.alert show]; 

       [self.replyDelegate replyRequestSuccessful:NO]; 
      } 
      else { 
       [self.replyDelegate replyRequestSuccessful:YES]; 
      } 
     } 
    }]; 

我试过debuggin,它死了,一旦它进入performRequestWithHandler。它去了else块,并与上述错误一起死亡。

回答

67

这意味着,要传递一个NSNumber其中称为代码期望的NSString或具有length方法一些其它物体。您可以告诉Xcode打破异常,以便您看到方法被调用的方式。

+7

更可能的是,他的内存管理存在问题,并且运行时/框架期望NSString不再存在(来自过早的重新分配),并且NSNumber已被分配到那里。如果你有意将'length'发送给'NSNumber',编译器会希望提醒你。 – dreamlax 2012-04-11 08:04:13

+0

如果'NSNumber'在字典中或通过其他擦除类型的接口传递,则不会。但是你是对的,他很可能会过度释放某些东西。尝试使用'NSZombieEnabled'可能是个好主意。 – zoul 2012-04-11 08:38:29

+0

“擦除类型”是什么意思? – dreamlax 2012-04-11 08:41:33

6

具体地说这行代码:

[params setObject:replyToID forKey:@"in_reply_to_status_id"]; 

replyToID不是字符串或有一个方法length。如果你没有这个,或者如果你将replyToID转换为字符串,然后将它设置为参数,它应该工作。

相关问题