Довольно старый вопрос, и первоначальный вопрос, скорее всего, давно ушел ... но для истории и будущих читателей - вот что происходит.
Проблема в том, что вы создаете 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];