В рамках1 существует отдельная категория класса A. Если я использую framework1 в приложении напрямую, все в порядке.непризнанный селектор для категории
Если я связываю framework1 и некоторые другие фреймворки, используя флаг ссылки -ObjC и '-framework framework1', чтобы создать составную структуру2. Когда я использую framework2 в приложении, он вылетает из-за отсутствия методов, определенных в категории classA.
Используя команду nm для проверки двоичного объекта framework2, я могу найти частную категорию.
Это действительно странно, и я не знаю почему.
Код выглядит примерно так.
Framework1 -> classA.m
@interface classA(Private)
+ (void)method1;
@end
@implementation classA(Private)
+ (void)method1{}
@end
@implementation classA
+ (void)method2
{
[self method1];
}
@end
Тогда я компилирую Framework1 в перемещаемом формате.
В Framework2 я импортирую Framework1. Добавьте «-ObjC» и «-framework Framework1». Затем скопируйте Framework2 как перемещаемый.
Использование Framework2 в приложении, компиляция и запуск в порядке. Но когда запускается метод2 класса А, приложение вылетает из-за отсутствия метода-метода1. Если я использую Framework1 непосредственно в приложении, все в порядке.
Вопрос закрыт! Я понял, что если все фреймворки скомпилированы как статические и внедряют framework1 в framework2, используя другие библиотечные флаги. Добавьте флаг -ObjC в последнюю демонстрационную версию приложения. Все идет хорошо. Загружаются все категории.
Вы публикуете и импортируете правильные файлы заголовков? –
ДА, после объединения фреймворков в один, я обрабатываю заголовки для ссылок. Частная категория classA используется внутренне другими методами класса A и не является общедоступной. – wqyfavor
Framework1 построен как файл перемещаемого объекта, а объединенный framework2 также является перемещаемым объектом. – wqyfavor