Класс MyClaseName реализован как в A.Framework, так и в B.Framework.

У меня есть приложение для iOS, которое использует фреймворки A и B. Для каждого из них требуется класс MyClaseName.

После запуска приложения в журнале появляются следующие предупреждения:

objc [2472]: класс MyClaseName реализован как в /Users/myusername/Library/Developer/Xcode/DerivedData/workspace-amvqjwzykbswydebvpvdfbylgsck/Build/Products/Debug-iphonesimulator/A.framework/A, и в / Developername / Library / myusername. /Xcode/DerivedData/workspace-amvqjwzykbswydebvpvdfbylgsck/Build/Products/Debug-iphonesimulator/B.framework/B. Один из двух будет использован. Какой из них не определен.

Я проверил следующие похожие ТАК вопрос, но, к сожалению, это не мой случай.

Итак, как я могу исправить эту проблему?


person David V    schedule 26.02.2015    source источник
comment
Думаю, вам, возможно, придется переименовать одну из них.   -  person Yuchen    schedule 26.02.2015
comment
Вы должны переименовать их, очень важно, чтобы при создании класса вы использовали своего рода префикс. Обычно я использую свой начальный AF и имя проекта или фреймворка, например AFPhotogunViewController.   -  person Andrea    schedule 26.02.2015
comment
@Yuchen, экземпляры этого класса должны быть единственными для всего проекта. В случае переименования у меня будут разные экземпляры.   -  person David V    schedule 27.02.2015
comment
@IAmDav, это очень похоже на проблему наследования алмаза в C++. Не та же, но похожая идея. Не уверен, действительно ли есть решение вашей проблемы. Возможно, вам все же придется реорганизовать структуру кода.   -  person Yuchen    schedule 27.02.2015
comment
привет @Yuchen, на самом деле проблема связана с фреймворками iOS. мои классы C ++ загружаются дважды. Я думаю, что этот Xcode должен ввести новую опцию, чтобы избежать этой ситуации.   -  person David V    schedule 02.03.2015


Ответы (1)


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

Классы A.framework должны иметь префикс AF, а B.framework должен использовать BF, например:

AFClassName *aInstance = [AFClassName new];
BFClassName *bInstance = [BFClassName new];

Без префикса оба этих класса будут фактически называться ClassName, что приведет к конфликту, который вы видите.

person dannyzlo    schedule 26.02.2015
comment
Как вы предлагаете это сделать? написать скрипт для всех файлов, чтобы их переименовать? Я надеюсь, что есть какой-то вариант компоновщика, чтобы приложение понимало, что это один и тот же объект / класс? - person David V; 27.02.2015