Ответ 1
return [NSString stringWithFormat:@"%@",[self.hours objectAtIndex:row]];
Хорошо, у меня есть следующая общая проблема
[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];
Спасибо!
return [NSString stringWithFormat:@"%@",[self.hours objectAtIndex:row]];
Вы возвращаете NSNumber
, поскольку это то, что хранится в self.hours
. Поскольку NSString
- ожидаемое возвращаемое значение, вы должны создать строку с помощью:
[NSString stringWithFormat:@"%@", [self.hours objectAtIndex:row]];
или переоцените свои намерения. Вы действительно хотели сохранить индексы таким образом или хотите сохранить NSStrings
?
Если у кого-то возникает эта проблема и, в частности, возвращает индекс строки, вы всегда можете преобразовать NSNumber в stringValue, выполнив следующее:
NSString *code = [[[JSONResponse objectForKey:@"meta"] objectForKey:@"code"] stringValue];
Размещение a stringValue
в конце метода преобразует что-либо в строку, вы также можете использовать intValue
.
Комментарий [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]];