好吧,我遇到以下常见问题
[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];
谢谢!
答案 0 :(得分:45)
return [NSString stringWithFormat:@"%@",[self.hours objectAtIndex:row]];
答案 1 :(得分:8)
您将返回NSNumber
self.hours
。NSString
。由于[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]];