Ответ 1
У меня была эта проблема на последнем Xcode 4. Причина: я включил file.m
вместо file.h
Возможно, вы включили TinCanViewController.m
(должно быть TinCanViewController.h
)
Во время рефакторинга проекта iOS я столкнулся с этим медведем ошибки. Во время фазы связывания я получаю это сообщение:
ld: дублировать символ _OBJC_IVAR _ $_ TinCanViewController.currentViewController в /path/to/TinCanViewController -E98A666B7AF2673A.o и/path/to/TinCanViewController-E98A666B7AF2673A.o
Насколько я могу судить, похоже, что TinCanViewController-E98A666B7AF2673A.o
объявляет указанный символ дважды; оба пути указывают на тот же самый файл .o. Я запустил nm
в этом конкретном файле и только один раз включил этот символ:
00008150 S _OBJC_IVAR _ $_ TinCanViewController.currentViewController
Я запустил nm
во всех других .o файлах в каталоге, чтобы убедиться, что они каким-то образом объявили этот символ, но это не так. Это происходит с любым членом, который я добавляю в класс TinCanViewController - он не специфичен для currentViewController.
Мне кажется, что я каким-то образом каким-то образом свяжусь с классом, но я довольно усердно прошел и проверил все ссылки на этот класс. В рефакторинговой версии в основном нет. AppDelegate включает его, но сейчас это просто простой класс, который загружает другой ViewController с самого начала. Никакие другие классы в проекте не включают его.
Любые предложения о том, что может вызвать это или как я могу отладить его лучше?
У меня была эта проблема на последнем Xcode 4. Причина: я включил file.m
вместо file.h
Возможно, вы включили TinCanViewController.m
(должно быть TinCanViewController.h
)
У меня это случилось, но моя проблема была связана с проблемами слияния из нашего репо. Файл .m был указан дважды в месте, которое должно быть указано только один раз (внутри проекта, но не внутри структуры файла/группы, поэтому вы не могли видеть проблему в Xcode, только ошибка). Исправление открывает файл .pbxproj внутри вашего файла проекта и находит дубликат записи в этом файле. После удаления дубликата проект был построен просто отлично.
Я случайно включил файл .h и .m файл дважды в проект. Как только я удалил вторую копию, ошибка исчезла.
Эта проблема решена здесь, когда я удалил (используя Xcode) все файлы .m и .h из папки класса, затем очистил Project (Command + Shift + K) и снова создал. Поэтому я снова перетаскиваю файлы из Finder в Class Folder в Xcode. Наконец, я снова очистил и построил свой проект...
Удачи!!!
Убедитесь, что делегат .m указан только один раз в файлах компиляции.
Я думаю, что это ошибка с последним компоновщиком Apple при создании универсальных статических библиотек. Я не могу найти номер ошибки в настоящее время, но это происходит из-за того, что он неправильно генерирует armv6 и armv7 без их устранения.
Чтобы убедиться, что это так, измените конфигурацию, чтобы построить только armv6 или amv7, и у вас не будет этой проблемы.
Это также может произойти, если у вас есть проект с несколькими целевыми объектами, а две цели имеют тот же файл, что и abc.m
, и что для обеих целей выбран abc.m
.
Что случилось в моем случае, у меня было две цели с именем ABC
и XYZ
, и у обоих был свой собственный файл DiagramViewController.m
, который должен запускать код для своих целей. Я случайно имел DiagramViewController.m
цели ABC
, которая была выбрана для XYZ
.
Нажмите файл .m
, перейдите к инспектору файла и отмените выбор дополнительной цели.
У меня была такая же проблема. проблема заключалась в том, что у меня были две библиотеки, содержащие один и тот же файл .m.
как это
lib.a - for device.
libCauly-universal.a - for simulator and device.
поэтому я удалил один.