Поскольку objectAtIndex:
возвращает id
, то есть универсальный указатель, компилятор не может знать, какое имя метода заменить для доступа к вашему свойству .name
.
Вы должны полностью указатькомпилятору, что вы хотите сделать в этом случае.Либо укажите точное имя метода:
[[tests objectAtIndex:row] name];
, либо укажите фактический тип объекта:
((Test *)[tests objectAtIndex:row]).name;
Когда вы пишете foo.bar
, компилятор должен искать в foo
и найдите имена методов, связанные со свойством bar
.Обычно это bar
/ setBar:
, но они могут быть чем угодно; * из-за этой неоднозначности компилятору необходимо знать фактический класс foo
.Учитывая только общий указатель, он не может найти эту информацию.
Предупреждение указывает, что компилятор также проверил, является ли объект в левой части .
структурой с полем с именемname
.Нет такого поля, поэтому компилятор не знает, что вы от него хотите.
* Например, @property(retain, setter=putThisValueIntoBar, getter=hamAndEggs) Bar * bar;