Платформа iOS и импорт категорий

Я только начал создавать свою собственную структуру, перегруппировав некоторые полезные помощники, утилиты, инструменты и т. д. Все работает нормально, мне просто интересно, можно ли импортировать мои категории непосредственно в мой файл структуры основных заголовков.

Например, мой фреймворк называется myFramework. Я поместил имя класса myFramework.h в общедоступные заголовки, внутри которых я написал все свои импорты:

#import "MyCategory+Helper.h"
#import "MyOtherCategory+Helper.h"
#import "AClass.h"
...

Затем я создаю свой фреймворк и распространяю его среди разработчиков своей команды.

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

Пока я использую LoadableCategory.h чтобы мои категории работали в моей структуре и указывали моим разработчикам, что они должны использовать флаг -ObjC в настройках «Другие флаги компоновщика» и импортировать каждую категорию следующим образом:

#import <myFramework/MyCategory+Helper.h>
#import <myFramework/MyOtherCategory+Helper.h>
...

Может быть, это невозможно, но интересно, почему? что-то я скучаю :)

Спасибо ! Пеби

PS: Извините за мой английский...


person Pebie    schedule 21.06.2013    source источник
comment
это выглядит любопытно '‹...›' Я думаю, вам следует убрать кавычки.   -  person stosha    schedule 21.06.2013
comment
@stosha: ты прав. Это просто ошибка, когда я набрал код.   -  person Pebie    schedule 24.06.2013


Ответы (2)


Если вы хотите убедиться, что ваши категории включены при связывании вашей платформы, вам нужно указать параметр -all_load в разделе Другие флаги компоновщика в настройках сборки.

person CaptainRedmuff    schedule 21.06.2013
comment
Спасибо, но это не вопрос, и на данный момент флага Obj-C достаточно. Я хочу, чтобы больше не использовать этот флаг. - person Pebie; 21.06.2013
comment
Я не думаю, что вы можете избежать использования любого из этих флагов. Это довольно стандартная практика при включении сторонних фреймворков. - person CaptainRedmuff; 21.06.2013
comment
Хорошо, моя ошибка, я опубликую решение после некоторых тестов. - person Pebie; 21.06.2013

Как сказал капитан Редмафф,

Я сделал ошибку. После нескольких попыток я вижу, что с флагом компоновщика -all_load он работает даже для импорта категорий. Моя ошибка была в моем основном заголовочном файле: плохой импорт, отсутствие некоторых вещей и т. д. И, наконец, не перезагрузить мой проект после установки флага -all_load.

Теперь у меня в myFramework.h:

#import "MyCategory+Helper.h"
#import "MyOtherCategory+Helper.h"
#import "AClass.h"
...

В моем проекте, где я использую фреймворк:

1/ Установите "Другой флаг компоновщика" на -all_load (при необходимости перезагрузите XCode)

2/ Просто #import <myFramework/myFramework.h> в myProjectApp-Prefix.pch например

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

Спасибо, CaptainRedmuff, я уже протестировал ваше решение, но тщетно. После дополнительных тестов все в порядке!

* РЕДАКТИРОВАТЬ Все работает нормально, пока я не перейду к одному из моего класса, который использует одну из моей категории. XCode указывает мне, что у меня ошибка, как будто категория не существует. Та же проблема, когда я очищаю свой код :((

Нет видимого интерфейса для... объявляет селектор...

** РЕДАКТИРОВАТЬ Если я импортирую <myFrameWork/myFramework> в myProjectApp-Prefix.pch, но не в #ifdef __OBJC__ conditional, все в порядке.

person Pebie    schedule 21.06.2013