Быстрое перечисление в OS 3.0 - PullRequest
2 голосов
/ 19 июня 2009

Я только что попытался скомпилировать приложение для iPhone под OS 3.0, и я получил ошибку компиляции при использовании быстрого перечисления.

Я пытаюсь пройти через NSArray, содержащий классы cComment:

for (cComment* newComment in comments.comments)

И я получаю эту ошибку

ошибка: тип средства доступа не соответствует типу свойства 'comments'.

Это работает безупречно при компиляции с ОС 2.2.1.

Я понимаю ошибку, перечисление не является строго типизированным, но, насколько я знаю, дженерики / шаблоны не поддерживаются в target-c. Так что в настоящее время я могу видеть только один способ:

for (id commentObject in comments.comments)
{
     cComment *newComment = (cComment *)commentObject;
}

Кто-нибудь может придумать другой путь? Почему это изменилось? Будем благодарны за любые замечания к документации Apple об этом изменении.

EDIT

Следуя предложению Grouchal, я попробовал это: NSArray * allComments = comments.comments и я получил ту же ошибку, так что, кажется, это не о перечислении в конце концов

вот код из заголовочного файла:

NSMutableArray * комментарии;

@ свойство (только чтение, неатомное) NSArray * comments;

и свойство синтезируется в файле реализации.

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

Спасибо.

Ответы [ 3 ]

1 голос
/ 19 июня 2009

Проблема в определении свойства. Вы должны изменить это как:

@property (readonly,nonatomic) NSMutableArray* comments

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

0 голосов
/ 19 июня 2009

Я собираюсь закрыть этот вопрос и задать новый под изменениями target-c для iPhone OS 3.0.

Я сам реализовал метод getter для возврата NSArray, и он работает просто отлично. Также работает изменение свойства на NSMutableArray, но на самом деле это не то, что я хочу делать.

Понятия не имею, почему это изменилось. Это изменение цели, а не изменение ОС. Также нет упоминания об этом в документации изменений между 2.2 API 3.0 API.

Спасибо всем за ответ.

0 голосов
/ 19 июня 2009

Я не вижу причин, по которым этот код не должен работать в OS 3.0. У меня уже работает похожий код.

Что произойдет, если вы измените код на

NSArray *commentArray = comments.comments;
for (cComment *newComment in commentArray){
.....
}

Я только что заметил, когда писал это, где * есть в вашем коде - это проблема? действительно ли это должно быть cComment * в объявлении for?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...