Дублирующий символ _OBJC_METACLASS _ $_ ClassName

Я пытаюсь запустить приложение cocos2d и сталкиваться с этой ошибкой, так как недавно я обновил свой sdk до 4.2 и мой cocos2d до 0.99.5.

Я попытался очистить свой проект, даже изменив развертывание Target ios, но ошибка остается прежней. Также переименуйте имя класса так же, чтобы избежать дублирования из имен классов библиотеки cocos2d.

ld: дублировать символ _OBJC_METACLASS _ $_ MenuSceneNew в /Users/umaidsaleem/Desktop/functionalityTest/ сборки/Debug-iphonesimulator/libcocos2d libraries.a(MenuScene.o) и /Users/umaidsaleem/Desktop/functionalityTest/build/functionalityTest.build/Debug-iphonesimulator/functionalityTest.build/Objects-normal/i386/MenuScene.o

Ответ 1

Вы дважды связываете файл MenuScene.m. Вы, по-видимому, имеете его в статической библиотеке, а также в своем основном приложении.

Ответ 2

Еще одна довольно простая вещь, чтобы проверить, что вы случайно не #import a .m, а не заголовочный файл .h.

Случилось со мной.

Ответ 3

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

Я закончил с двумя ссылками для заголовка и реализации как в корне проекта, так и в моей группе моделей. Удаление верхних ссылок на файлы .h и .m избавило от сбоя связи.

Ответ 4

Иногда Core Data вставляет AnyProjectNameModel.xcdatamodeld в источники компиляции фаз сборки. Проверьте его и удалите, и все снова запущено... Сообщение об ошибке просто указывает сгенерированные ManagedObjects... Правильное место для AnyProjectNameModel.xcdatamodeld - это ресурсы Copy Bundle на этапах сборки. введите описание изображения здесь

Ответ 5

Проверьте источники компиляции вашей цели и посмотрите, включен ли файл class.m дважды

Ответ 6

Глупые ошибки, которые я сделал, это то, что я назвал мой @implementation таким же, как мой суперкласс.

В .h

@interface Subclass : Superclass
@end

В .m

#import "Subclass.h"

@implementation Superclass
@end

Никакие обычные рекомендации от google, казалось, не помогли, поэтому, если кто-то такой же сумасшедший или усталый, как и я (возможно, здоровое сочетание обоих), убедитесь, что вы не дублировали @implementation!

Ответ 7

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

Я знаю, что OP решила их проблему, но я чувствовал, что это может помочь кому-то, кто читает этот вопрос, ища помощь.

Ответ 8

Еще одна вещь, чтобы проверить двойную привязку - ее можно иметь один и тот же файл в двух разных местах в списке файлов слева. Затем компилятор компилирует и связывает его дважды.

Это происходит, например, при организации иерархии файлов.

Вам не нужно создавать библиотеку или что-то интересное - просто перетащите .m в два разных места в дереве проектов.

Не забудьте удалить ссылку только на одну из них, не требуется удаление файлов.

Ответ 9

Мне удалили -all_load из 'Other Linker Flags'.

Ответ 10

Я сам выяснил решение, извиняюсь за небольшую задержку отправки. Вся помощь очень ценится, но проблема возникает, когда я добавляю новый класс CCLayer и checkmark cocos2d 0.99.5 статической библиотеки, которая была неправильной. Затем я повторно объявляю свой класс, не проверяя и не очищаю свои цели, а затем не строю и не ухожу. Проблема решена сейчас.

Ответ 11

XCode Beta разбилась обо мне, удалив ссылку на класс. Это вызвало проблему, описанную в ответе, исправление было другим.

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

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

Ответ 12

Ни один из ответов не работал у меня, поэтому я сделал удаление файлов из проекта и выбрал только "Удалить ссылки".

Затем я добавил обратно те же файлы, и он сработал.

Это исправило мою ошибку. Возможно, XCode потерял ссылки, хранящиеся где-то, так как проект многокомпонентен.

Надеюсь, что это поможет кому-то.

Ответ 13

Другая возможность для ошибки, например, возникает при столкновении имен классов. Либо 2 класса с одним и тем же именем в вашем проекте, либо класс из вашего проекта, столкнувшись с одним, определенным в некоторых библиотеках зависимостей.

Ответ 14

Удалите цель с правой панели и снова добавьте цель. Это приведет к удалению дубликатов ссылок. Это может произойти, если 2 программиста добавят одну и ту же цель и зафиксируют файл проекта.

Ответ 15

В моем случае я использовал двоичную библиотеку, включающую одно и то же имя класса, которое я использовал снаружи, Поэтому я изменил имя своего класса, и он отлично работает:)

Ответ 16

У меня был проект с двумя целями. Объект с именем "Компонент", а второй - "Образец". Образец использовал компонент в качестве библиотеки ссылок. Затем Компонент использовал блок под названием MyPod (установленный с cocoapod).

Подпись была написана следующим образом:

def shared_pods
   pod 'MyPod' 
end

target 'Component' do
    shared_pods  
end

target 'Sample' do
    shared_pods
end

Обе цели ссылались на общий список подкатегорий. При создании целевого компонента не возникает никаких проблем, но при создании образца я получаю дубликат символа _OBJC_METACLASS _ $_ ClassName. Я изменил Подфайл на:

def shared_pods
    # empty
end

target 'Component' do
   pod 'MyPod'
   shared_pods  
end

target 'Sample' do
    shared_pods
end

И это решает проблему. Прошло 3 часа, надеемся спасти кого-то время.

Ответ 17

В моем случае это происходило из-за того, что Xcode автоматически генерировал класс NSManagedObject, который затем столкнулся с моим вручную созданным классом NSManagedObject. В этом случае вы можете установить "Codegen" в "Manual/None" в Data Model Inspector для вашего вновь созданного объекта.