Ответ 1
Ваша сторонняя структура вероятна, используя категорию в существующем классе (apple). Но для загрузки/поиска категории вам нужно добавить флаг -ObjC
в настройках сборки в разделе Other Linker Flags
Я использую стороннее программное обеспечение для написания приложения iPad с помощью Xcode 4.3.2. Программное обеспечение является открытым исходным кодом и обычно устанавливается таким образом, что его код будет скомпилирован вместе с любым кодом, который разработчик пишет для приложения. Поскольку я использовал программное обеспечение во многих местах, я решил создать его как статическую библиотеку для симулятора iOS.
Мне удалось собрать библиотеку и преобразовать одно приложение для ссылки на эту библиотеку вместо компиляции исходного исходного кода. Однако, когда я иду запускать приложение на симуляторе, я получаю сообщение об ошибке, которое говорит о непризнанном селекторе, отправленном экземпляру.
Я проверил, что программа успешно использует части статической библиотеки. Тем не менее, есть одна часть кода, которая пытается вызвать метод для объекта и что там происходит сбой. Вызываемый метод на самом деле не определен в интерфейсе этого объекта. Скорее, он предоставляется в дополнительном модуле, который определяет категорию для этого класса объектов. Заголовочный файл для этого модуля правильно включен, и компилятор должен был найти метод категории и применить его к объекту, но во время выполнения происходит ошибка, упомянутая выше.
Я использовал команду "nm", чтобы проверить, существует ли метод категории в статической библиотеке. Ниже приведен пример вывода:
nm libStaticLibrary.a | grep categoryMethod
00000130 t -[SomeClass(Category) categoryMethod:]
0000354c s -[SomeClass(Category) categoryMethod:].eh
Какие идеи имеют люди о том, как эту библиотеку можно заставить работать с нужным приложением?
Ваша сторонняя структура вероятна, используя категорию в существующем классе (apple). Но для загрузки/поиска категории вам нужно добавить флаг -ObjC
в настройках сборки в разделе Other Linker Flags
Ответ Pfitz велик, но это заставит компилятор загружать кучу неиспользуемых двоичных файлов в ваш проект, который вам не нужен. Пожалуйста, обратитесь к этому ответу, чтобы узнать, почему fooobar.com/info/29356/...
Вот лучшее решение:
1) выберите цель project с левой панели (навигатор папок)
2) выберите "Фазы сборки" нажмите
3) разверните "Скомпилировать источники" cell
4) нажмите кнопку "плюс" внизу, а затем добавьте файл категории .m в
Готово!
Примечание: вам нужно искать файл, перейдя по папке самостоятельно, не вводите имя файла в поле поиска