значение сообщения в том, что в переводе есть несколько селекторов с именем setName:
(то есть оно объявлено, по крайней мере, в другом месте среди всех включенных заголовков). компилятор может выбрать неправильный селектор (который может привести к неопределенному поведению).
Обычно вы можете исправить проблему, используя один (или несколько) из следующих подходов:
1) переименуйте метод в уникальное имя: например, setExerciseName
может быть в порядке, если не используется в других переводах.
2) совпадать с подписью другого селектора. например setName:(NSString *)name
3) используйте тип безопасности:
Exercise * ex = [Exercise new];
[ex setName:kCobra];
4) приведите переменную к типу: [(Exercise*)exercise setName:kCobra];
5) восстановить тип с новой переменной: Exercise * ex = exercise;
поскольку вы объявили переменную как id
, вы удалили тип, и это означает, что объект может ответить на любой видимый селектор. как правило, вы не должны удалять тип таким способом, кроме случаев, когда это действительно необходимо.
лучший подход, который я вижу, это комбинация 1 и 3:
[ex setExerciseName:kCobra];