NSClassFromString в библиотеке - PullRequest
0 голосов
/ 09 декабря 2011

У меня есть 2 проекта.

Первый проект - это статическая библиотека Cocoa Touch.Другой - это проект приложения для iPad.

В моем проекте библиотеки я звоню, чтобы получить класс и создать экземпляр из него:

NSClassFromString(@"ClassName");

Единственная проблема в том, что это вернетноль.В моем основном проекте приложения для iPad это не вернет nil.

Класс, который он должен загрузить из строки, находится в проекте iPad.

По моему объяснению, библиотека не может загрузитькласс, потому что его нет в комплекте.Это правда?

Как бы я решил эту проблему, чтобы вызов в библиотеке не возвращал ноль?

Спасибо

Ответы [ 3 ]

1 голос
/ 15 февраля 2012

Проект должен настроить «флаг другого компоновщика» (OTHER_LDFLAGS), чтобы добавить значение «-ObjC».

1 голос
/ 09 декабря 2011

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

Если вашей библиотеке требуется класс, не определенный в ней, вам следует рассмотреть возможность изменения вашего API, чтобы запросить имя класса, а не предполагать конкретный:

- (void)doSomething {
  klass = NSClassFromString(@"ClassName");
  obj = [[klass alloc] init];
  [obj doSomething];
  [obj release];
}

- (void)doSomethingWithNewObjectFromClass:(Class)klass {
  obj = [[klass alloc] init];
  [obj doSomething];
  [obj release];
}

Предпочтительно, вам следует рассмотреть возможность использования шаблона делегата .

0 голосов
/ 09 декабря 2011

Мое объяснение состояло бы в том, что библиотека не может загрузить класс, потому что его нет в комплекте.Это правда?

Нет, не правда.Во время выполнения нет ни библиотек, ни проектов, только ваше приложение, содержащее весь (ваш) связанный код, который находится все в вашем исполняемом файле.

Вы могли бы сделать это до загрузки классов, вы могли бы записать егонеправильно, вам нужно будет показать код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...