[NSCFNumber isEqualToString:]:发送到实例的无法识别的选择器

时间:2011-07-29 16:50:26

标签: objective-c ios nsstring int

好吧,我遇到以下常见问题

[NSCFNumber isEqualToString:]: unrecognized selector sent to instance

但这次我不确定如何解决它。

以下是viewDidLoad:

中的声明
- (void)viewDidLoad {

    [super viewDidLoad];

    NSMutableArray *tempHours = [NSMutableArray array];
    for (int i = 0; i < 12; i++) { 
        [tempHours addObject:[NSNumber numberWithInt:(i+1)]];
    }
    self.hours = tempHours; // 'hours' is a synthesized NSArray property of the ViewController
    [tempHours release];

  // two more similar array declarations here

}

这是UIPickerView的代码方法,其中东西断开(例如,if语句)

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {

    NSString *stringIndex = [NSString stringWithFormat:@"Row #%d", row];

    if(component == 0) {
        return stringIndex = [self.hours objectAtIndex:row];
    }

    // more code for other components (of the same form) here

    return stringIndex;
}

我认为我需要将我的NSArray NSNumber对象作为字符串进行类型转换。如何正确地使用该声明:

stringIndex = [self.hours objectAtIndex:row];

谢谢!

4 个答案:

答案 0 :(得分:45)

return [NSString stringWithFormat:@"%@",[self.hours objectAtIndex:row]];

答案 1 :(得分:8)

您将返回NSNumber self.hoursNSString。由于[NSString stringWithFormat:@"%@", [self.hours objectAtIndex:row]]; 是预期的返回值,您应该通过以下方式创建一个字符串:

NSStrings

或重新评估您的意图。你真的想以这种方式存储索引,还是想存储{{1}}?

答案 2 :(得分:3)

如果有人遇到此问题并专门返回行的索引,则可以通过执行以下操作始终将NSNumber转换为stringValue:

NSString *code = [[[JSONResponse objectForKey:@"meta"] objectForKey:@"code"] stringValue];

在方法的末尾放置stringValue会将任何内容转换为字符串,您也可以使用intValue

答案 3 :(得分:2)

评论[tempHours release]; //它是自动释放的对象。你没有使用和使用alloc或copy或new:

- (void)viewDidLoad {
    [super viewDidLoad];

    NSMutableArray *tempHours = [NSMutableArray array];

    for (int i = 0; i < 12; i++) { 
        [tempHours addObject:[NSNumber numberWithInt:(i+1)]];
    }

    self.hours = tempHours; // 'hours' is a synthesized NSArray property of the ViewController

    // [tempHours release];
}

更多的是你已经将NSNumber添加到数组中 所以 转换为字符串值:

stringIndex =[NSString stringWithFormat:@"%@",[self.hours objectAtIndex:row]];