Предварительно скомпилированный заголовок с проблемой констант

У меня есть несколько файлов констант «Constants.h» в моем проекте, которые я включаю в файл Prefix.pch, чтобы они были доступны для всех классов в моем проекте. Они просто содержат набор операторов #define.

Мои классы не распознают эти константы (без автозаполнения), и Xcode выдает мне ошибки «Необъявленный идентификатор» каждый раз, когда я их использую. Однако, когда я запускаю проект, все работает нормально (установлено игнорировать ошибки).

Можно ли как-нибудь избавиться от этих предупреждений? #pragma игнорировать их в файле префикса или что-то в этом роде? Я пробовал много вариантов, в том числе установить для «префикса заголовка прекомпиляции» значение «НЕТ» в настройках сборки.

Любые идеи?

РЕДАКТИРОВАТЬ: я пытался удалить производные данные и очистить/удалить папку сборки безрезультатно.

Возможно, стоит отметить, что у меня есть 3 цели в моем проекте и еще один проект в этом проекте.

Кроме того, некоторые из #imports импортируют обычные классы. Как расширение категории в UIFont и класс Analytics. Может ли это повлиять на это?


person TTillage    schedule 16.08.2012    source источник
comment
Необъявленный идентификатор — это ошибка, а не предупреждение. Вы не можете скомпилировать и запустить программу, используя необъявленные идентификаторы.   -  person Martin R    schedule 16.08.2012
comment
Отредактировано, чтобы исправить это, я имел в виду ошибку. Я установил игнорирование ошибок, поэтому программа по-прежнему компилируется и работает нормально, xcode просто выдает мне эти ошибки, когда я редактирую код.   -  person TTillage    schedule 16.08.2012
comment
И он не распознает их сразу после сборки, обычно только когда я нахожусь внутри класса, который использует эти константы, он начинает видеть «ошибки»   -  person TTillage    schedule 16.08.2012
comment
Что именно вы установили для игнорирования ошибок? Вы не можете скомпилировать и запустить программу, содержащую ошибки.   -  person Martin R    schedule 16.08.2012
comment
лучше ответить на свой вопрос, чем редактировать сам вопрос и помечать его как решенный, чтобы он не отображался в списке вопросов без ответов.   -  person john.k.doe    schedule 16.08.2012
comment
Я не мог ответить на свой вопрос, потому что это не позволяло мне, потому что новые пользователи не могут ответить на свои вопросы в течение 4 часов после публикации.   -  person TTillage    schedule 18.08.2012


Ответы (4)


Чтобы исправить это, мне пришлось изменить флаг «Precompile Prefix Header» на NO в настройках сборки моей цели. Сделав это, вы потеряете производительность сборки, достигнутую за счет кэширования скомпилированного заголовочного файла, но в моем случае мой заголовок префикса довольно мал, поэтому я не увижу хита во времени, необходимом для сборки.

person Peter    schedule 19.12.2012
comment
Это решило проблему и для меня, но значительно замедлило компиляцию. Любой способ избежать этого? - person fishinear; 11.01.2014

Попробуйте удалить производные данные проекта. Xcode иногда требуется переиндексировать ваш проект, чтобы удалить такие «ошибки».

Органайзер > Проекты > Ваш проект

Нажмите кнопку «Удалить» справа от строки «Производные данные».

Немедленно закройте Xcode, а затем снова откройте.

person Ian L    schedule 16.08.2012
comment
Пробовали так много раз. Также пробовал удалять папку сборки, очищать и т. д. Продолжает возвращаться. - person TTillage; 16.08.2012
comment
Решил мою проблему, я застрял в течение часа. - person Zeeshan; 03.03.2014

У меня был файл PCH, импортирующий файл .h с большим количеством макросов (в частности, я использую MJGAvailability, который предупреждает, когда я использую функции, более новые, чем моя цель развертывания). Замена:

#import "MJGAvailability.h"

с участием

#include "MJGAvailability.h"

решил эту проблему для меня.

person fishinear    schedule 11.01.2014

У меня был макрос препроцессора в одной из моих целей, который я переместил из «макросов препроцессора» в «макросы препроцессора, не используемые в предварительно скомпилированных заголовках», и это решило проблему.

person TTillage    schedule 17.08.2012