Дубликат объявления интерфейса для класса 'Foo' - PullRequest
17 голосов
/ 12 октября 2010

Я работал над своей программой, и, кажется, что-то изменилось в настройках.Внезапно у меня появляется ошибка «Дублирующее объявление интерфейса для класса« Foo »».В нем упоминается, что заголовочный файл дублируется, но есть только одна копия.

Интересно, что это происходит только в режиме отладки, а не в режиме устройства.

Кто-нибудь знает, что может быть не так?*

Я использую Objective-C ++ и некоторые статические библиотеки.

Ответы [ 13 ]

17 голосов
/ 29 марта 2012

У меня была точно такая же проблема. У меня было две копии заголовка, и я удалил старый, удалив ссылку на него в xcode. Тогда была только одна ссылка на заголовок, которая указывала на новый файл заголовка в навигаторе проекта.

После фактического удаления старого заголовка из файловой системы проблема исчезла.

Это может быть ошибка в xcode. Может быть, иногда, когда вы удаляете ссылку на файл, часть ссылки остается в файле проекта.

14 голосов
/ 30 октября 2012

У меня есть это сообщение об ошибке, и у меня нет дублирующего заголовка или повторяющихся импортов. Проблема в том, что я переименовал файл заголовка, и XCode каким-то образом сохранил их в кэше, что выдает ошибку сборки.

Я сделал следующее, чтобы это исправить. Надеюсь, это поможет тем, кто уже попробовал другой ответ и все еще получил ошибки.

  1. Чистый проект (ы)
  2. Удалите «Производные данные» (Организатор> вкладка «Проекты», выберите проект и нажмите «Удалить»)
  3. Перезапустите Xcode
  4. Сложение
9 голосов
/ 12 октября 2010

Я нашел проблему. Было две копии файла заголовка, и XCode запутался.

Теперь загадка в том, как XCode решил скопировать эти файлы сам по себе ...

5 голосов
/ 28 сентября 2011

У меня была похожая проблема, но у меня не было двух копий исходных файлов. В моем случае у меня была следующая ситуация:

Класс A дал ошибку выше и Класс B имел свойство, использующее тип класса A.

Проблема заключалась в том, что в классе B я назвал #import "Class A" в файлах .h и .m. Это вызвало проблему выше в моем случае. Надеюсь, это кому-нибудь поможет.

2 голосов
/ 22 мая 2017

Эта ошибка возникает из-за присвоения одного и того же имени переменной различным объектам. Это ошибка после Xcode7.0. Таким образом, чтобы преодолеть эту проблему, просто Перейдите к настройке сборки и найдите Нет общих блоков и установите его NO .

И построить снова, вы не получите эту ошибку снова.

CheersKP

2 голосов
/ 04 ноября 2013

Я изменил с "#include" на "#import" во всех заголовках файлов, и это решило проблему.Я предполагаю, что когда вы "#include" файл, вам нужно написать свои собственные меры защиты от нескольких включений, в то время как XCode обрабатывает это для вас, когда вы используете "#import".

1 голос
/ 30 июня 2016

Моя проблема заключалась в следующем. Я добавил поп-анимационную среду в свой проект, но использовал xcodeproj вместо xcworkspace. После настройки я смог создать цель pop-iso-framework, но не смог создать цель своего приложения. Позже я понял, что XCode добавил поп-классы в Фазы сборки -> Исходники компиляции цели моего приложения . Удаление всех поп-классов оттуда устранило проблему.

1 голос
/ 18 мая 2016

Для меня эта проблема была вызвана при переходе на use_frameworks! на Cocoapods. Я импортировал заголовок из FBSDKCoreKit в удобном классе, который я использовал для расширения методов. Это было нормально, пока я не переключился на использование фреймворков, когда использование локальных включений (#import "FBSDKAccessToken.h") больше не нормально; Мне пришлось переключиться на глобальные включения (#import <FBSDKCoreKit/FBSDKAccessToken.h>). Эта статья , объясняющая, почему вы больше не включаете заголовки в файл моста, указала мне правильное направление.

1 голос
/ 12 апреля 2013

У меня также была эта проблема при архивировании рабочего пространства с различными самодельными статическими библиотеками. Проект будет работать нормально и работать на симуляторе, но когда я попытался «Архивировать» сборку для тестирования AdHoc, я получал эти дублированные ошибки определения интерфейса. Я решил, что на этапе «Копировать заголовки» правильно указываются заголовки public / project / private. У меня был один заголовочный файл, который был ошибочно настроен на «проект». Он должен был быть «общедоступным», и после этого архив был успешно создан.

0 голосов
/ 20 ноября 2017

У меня была такая же проблема при создании фреймворка. Ошибка «предыдущее определение здесь» указывает на тот же файл заголовка и номер строки, что и исходная ошибка «дублирующее определение интерфейса для класса». Ничего из вышеперечисленного не сработало, и в коде не было ошибок. Я выполнил поиск Spotlight для скрытого заголовка, и обнаружились две копии: одна, которую я ожидал, и другая в build / Debug-iphonesimulator / include. Я сделал чистку, а затем вручную удалил каталог сборки. Проблема ушла.

...