it-swarm.com.ru

Дубликат объявления интерфейса для класса 'Foo'

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

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

У кого-нибудь есть идеи, что может быть не так?

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

17
John Smith

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

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

9
John Smith

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

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

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

17
RohinNZ

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

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

  1. Чистый проект (ы)
  2. Удалите "Производные данные" (Организатор> вкладка "Проекты", выберите проект и нажмите "Удалить")
  3. Перезапустите Xcode
  4. Строить
14
Andy

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

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

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

5
Guy

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

2
RoyGal

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

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

CheersKP

2
Kalpesh Panchasara

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

1
TPoschel

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

1
Scott Fister

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

1
Josip B.

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

0
Michael Domino

У меня была эта проблема при использовании двух версий A.h файлов A.m. каждый для разных целей. Поэтому я сделал две папки (физические каталоги) и держал каждый A.h и A.m в отдельной папке. Затем добавили папку к нужной цели. Решил проблему для меня.

Немного вне контекста, но может помочь. !!

0
NaXir

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

0
Casey Perkins

Была такая же проблема, казалось, у меня было слишком много файлов class.m в моем файле project.pbxproj.

Всегда делайте резервную копию этого файла, прежде чем редактировать его на всякий случай!

0
Tim