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

Неопознанный метод вызова вызывающего абонента в статической библиотеке iOS

Я использую стороннее программное обеспечение для написания приложения iPad с помощью Xcode 4.3.2. Программное обеспечение является открытым исходным кодом и обычно устанавливается таким образом, что его код будет скомпилирован вместе с любым кодом, который разработчик пишет для приложения. Поскольку я использовал программное обеспечение во многих местах, я решил создать его как статическую библиотеку для симулятора iOS.

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

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

Я использовал команду "nm", чтобы проверить, существует ли метод категории в статической библиотеке. Ниже приведен пример вывода:

nm libStaticLibrary.a | grep categoryMethod
00000130 t -[SomeClass(Category) categoryMethod:]
0000354c s -[SomeClass(Category) categoryMethod:].eh

Какие идеи имеют люди о том, как эту библиотеку можно заставить работать с нужным приложением?

4b9b3361

Ответ 1

Ваша сторонняя структура вероятна, используя категорию в существующем классе (apple). Но для загрузки/поиска категории вам нужно добавить флаг -ObjC в настройках сборки в разделе Other Linker Flags

buildsettings

Ответ 2

Ответ Pfitz велик, но это заставит компилятор загружать кучу неиспользуемых двоичных файлов в ваш проект, который вам не нужен. Пожалуйста, обратитесь к этому ответу, чтобы узнать, почему fooobar.com/info/29356/...

Вот лучшее решение:

1) выберите цель project с левой панели (навигатор папок)
2) выберите "Фазы сборки" нажмите 3) разверните "Скомпилировать источники" cell
4) нажмите кнопку "плюс" внизу, а затем добавьте файл категории .m в

Готово!

Примечание: вам нужно искать файл, перейдя по папке самостоятельно, не вводите имя файла в поле поиска