Подтвердить что ты не робот

[NSCFNumber isEqualToString:]: непризнанный селектор, отправленный в экземпляр

Хорошо, у меня есть следующая общая проблема

[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];

Спасибо!

4b9b3361

Ответ 1

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

Ответ 2

Вы возвращаете NSNumber, поскольку это то, что хранится в self.hours. Поскольку NSString - ожидаемое возвращаемое значение, вы должны создать строку с помощью:

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

или переоцените свои намерения. Вы действительно хотели сохранить индексы таким образом или хотите сохранить NSStrings?

Ответ 3

Если у кого-то возникает эта проблема и, в частности, возвращает индекс строки, вы всегда можете преобразовать NSNumber в stringValue, выполнив следующее:

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

Размещение a stringValue в конце метода преобразует что-либо в строку, вы также можете использовать intValue.

Ответ 4

Комментарий [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]];