Две рамки с одинаковым символом - PullRequest
1 голос
/ 12 января 2012

У меня есть две платформы в моем проекте XCode, которые оба определяют класс с одинаковым именем (B.framework и C.framework оба имеют класс с именем MyClass), что приводит к паре предупреждений, таких как:

Duplicate symbol _OBJC_METACLASS_$_MyClass originally in B.framework/B(MyClass.o) now lazily loaded from C.framework/C(MyClass.o)
Duplicate symbol _OBJC_CLASS_$_MyClass originally in B.framework/B(MyClass.o) now lazily loaded from C.framework/C(MyClass.o)

Затем во время выполнения загружается только одна из реализаций, и попытка использовать другую приведет к «нераспознанному селектору, отправленному экземпляру», потому что это совершенно разные классы (даже если они имеют одинаковое имя).

Я использую одну из реализаций MyClass непосредственно в своем коде, но другая инфраструктура использует только свой MyClass , и я понятия не имею, почему он даже экспортируется (его даже не упоминают в заголовочных файлах фреймворков, я использовал nm для просмотра символов).

Как я могу заставить обе платформы работать?

1 Ответ

3 голосов
/ 12 января 2012

В Obj-C нет такого понятия, как "экспортируемые" классы.Вернее, не существует такой вещи, как «неэкспортируемые» классы.Именно из-за этой проблемы использование 2-или 3-буквенных префиксов в классах настоятельно рекомендуется для всего кода Obj-C.Ваше единственное решение (кроме использования этих платформ) состоит в том, чтобы отредактировать одну (или обе) платформ, чтобы изменить имя класса, или, если у вас нет доступа к источнику, вам нужно связаться с поставщиком и попросить еговнести это изменение.

...