Получение ошибки «Форматировать не строковый литерал и не форматировать аргументы» - PullRequest
1 голос
/ 20 августа 2011

Я посмотрел здесь и не увидел мою ту же ситуацию. Всем, кто хочет помочь, спасибо.

У меня есть сгруппированная таблица, в которой отображаются игры моих футбольных команд в предстоящем сезоне. Домашние и выездные игры.

     NSString *message = [[NSString alloc] initWithFormat:rowValue];
Error Message: Format not a string literal and no format arguments

Не совсем даже уверен, откуда это?

Я использовал учебник, который нашел в Интернете. Скопировал и вставил все это. Я изменил только те значения, которые мне нужны для моей личной таблицы. Это единственная ошибка, которую я получаю? Любая помощь??

Изменить: Если мне нужно предоставить больше кода или что-нибудь, пожалуйста, дайте мне знать!

Спасибо !!

- Энтони Ломбарди

Ответы [ 2 ]

0 голосов
/ 20 августа 2013

Довольно старый вопрос, и первоначальный вопрос, скорее всего, давно ушел ... но для истории и будущих читателей - вот что происходит.

Проблема в том, что вы создаете message со строкой формата в стиле printf - initWithFormat ожидает, что будет строка формата с символами%, указывающими замены - например, % f для числа с плавающей запятой,% d для целого числа и т. д. *

Вместо строки статического формата (строковый литерал, определенный непосредственно в вашем коде) вы передаете динамическую строку. Компилятор запутался, потому что вы не передали никаких аргументов. Если бы ваша динамическая строка содержала% подстановок, врата ада распались бы, или в лучшем случае ваши приложения потерпели бы крах.

Поскольку не имеет смысла иметь строку формата без аргументов, возникает ошибка.

Чтобы исправить это, вы можете заменить строки rowValue и message на:

NSString *rowValue = [listData objectAtIndex:row];
NSString *message = rowValue;

Или более кратко:

NSString *message = [listData objectAtIndex:row];

Или используя новый синтаксис литералов target-c и подписку:

NSString *message = listData[row];
0 голосов
/ 20 августа 2011

Не совсем уверен, что вы имеете в виду. Я введу больший блок кода, который может помочь.

- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSArray *listData =[self.tableContents objectForKey:
                    [self.sortedKeys objectAtIndex:[indexPath section]]];
NSUInteger row = [indexPath row];
NSString *rowValue = [listData objectAtIndex:row];

NSString *message = [[NSString alloc] initWithFormat:rowValue];

UIAlertView *alert = [[UIAlertView alloc]
                      initWithTitle:@"You Better Be There Or Be Watching It!"
                      message:message delegate:nil
                      cancelButtonTitle:@"Go Knights!"
                      otherButtonTitles:nil];
[alert show];
[alert release];
[message release];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
...