iOS: слишком много сообщений initWithDelegate и предупреждений компилятора - PullRequest
0 голосов
/ 16 июня 2011

Один из моих контроллеров представления опирается на несколько классов, каждый из которых имеет метод initWithDelegate :. Контроллер представления является делегатом во всех случаях. Я получаю предупреждения компилятора обо всех вызовах

[[ONE_OF_FOUR_CLASSES] alloc] initWithDelegate:self];

за исключением первого (файл заголовка которого загружается первым).

Все остальные выдают предупреждение о несовместимых типах указателей, назначаемых xx из yy. уу всегда первый из 4 классов.

Однако все работает нормально. Итак, как мне подавить эти предупреждения? Это ошибка LLVM?

Ответы [ 3 ]

0 голосов
/ 16 июня 2011

Я обнаружил, что простым способом подавить предупреждение было следующее:

[(ONE_OF_FOUR_CLASSES *)[ONE_OF_FOUR_CLASSES alloc] initWithDelegate:self];

Это приведение позволяет компилятору реализовать возвращаемое значение + (id) allocВызов не 'id', но на самом деле ваш ONE_OF_FOUR_CLASSES.

0 голосов
/ 16 июня 2011

Обратите внимание, что alloc возвращает id, поэтому компилятор не знает, что [CLASS_1 alloc] возвращает объект типа CLASS_1.Обычно он выводит правильный тип и не добавляет предупреждение, но иногда этого не происходит.Мое обычное решение - бросок.Ужасно, но это работает.

[(CLASS_1*)[CLASS_1 alloc] initWithDelegate:self];
0 голосов
/ 16 июня 2011

Звучит так, как будто типы не совпадают или не известны компилятору.Не забудьте добавить подписи ваших init -методов в ваши .h файлы и импортировать их.Убедитесь, что они возвращают id и что delegate также относится к типу id (по крайней мере, это то, что вы хотите большую часть времени).

Не стесняйтесь редактировать свой вопрос, чтобы добавить больше кодаесли это не прояснит ситуацию.

...