2014-08-19 5 views
0

Я получаю эту ошибку при компиляции проекта для реального телефона.UITableView показать номер строки от 0

формат

определяет тип «длинный», но аргумент имеет тип «Int»

На тренажере все отлично работает.

Если заменить "% D" с "% л.д." Я получаю это:

формат определяет тип 'INT', но аргумент имеет тип 'длинные'

В этом коде:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 
    if (cell) { 
     cell.textLabel.text = [NSString stringWithFormat:@"page %d", indexPath.row+1]; // <- 
    } 
    return cell; 
} 

Как это исправить?

ответ

2

indexPath.row является NSInteger. Это будет 32-разрядный бит в 32-разрядной компиляции или 64-битной в 64-битной компиляции. Когда я получил эту ошибку в Xcode, сообщение сообщило, что оно использует% ld в строке формата и отличает значение до длинного.

cell.textLabel.text = [NSString stringWithFormat:@"page %ld", (long)(indexPath.row+1]); 

Это устранило проблему как для 32-разрядной, так и для 64-битной сборки. Не бросайте в int, потому что в 64-битной сборке это сократит 64-битное значение до 32 бит.

Если вы используете NSUInteger, используйте% lu в качестве формата и передайте в unsigned long.

This question имеет несколько других альтернатив.

0

заменить эту строку с этим

 cell.textLabel.text = [NSString stringWithFormat:@"page %d",(int) indexPath.row+1]; // <- 
Смежные вопросы