Подтвердить что ты не робот

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

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

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

Кто-нибудь может понять, что может быть неправильным?

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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

  • Очистить проект (ы)
  • Удалите вкладку "Производные данные" ( "Организатор" > "Проекты", выберите проект и нажмите "Удалить" ).
  • Перезапустить Xcode
  • Построить

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

И снова создайте снова эту ошибку.

CheersKP

Ответ 9

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

Ответ 10

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

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

Ответ 11

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

Бит из контекста, но может помочь.!!

Ответ 12

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

Ответ 13

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