ВОПРОС 1Можно определить классы для импорта во время выполнения/Возможно игнорировать ошибки импорта?
Я 99% уверен, что вы не можете определить, какие другие классы импортирует класса во время выполнения ... но только в том случае, ... это то, что вы можете сделать?
ВОПРОС 2
Можно ли иметь ваше приложение игнорировать ошибку импорта? I.e., есть ли способ сделать ваше приложение все еще компилироваться и запускаться, даже если вы включаете #import "IrrelevantClass.h"
и не включаете IrrelevantClass.h/.m
в свой проект Xcode?
(ЧТО Я клоню ...)
Я создал пользовательский класс RulesManager.h/.m
с некоторыми обобщенными методами для принятия соответствующих мер, основанных на данные правила класса RulesManager_<ProjectName>.h/.m
, где каждый Xcode проект имеет свой собственный класс правил. (Давайте использовать проект Xcode MyProject
в качестве примера, так что наши два файла будут RulesManager.h/.m
и RulesManager_MyProject.h/.m
.)
В настоящее время, RulesManager_MyProject.h
импорт RulesManager.h
, и все мои занятия в моем импорте проекта RulesManager_MyProject.h
, так что мои классы могут назвать что-то вроде [RulesManager shouldExecuteGivenParameters:parameters rulesClass:rulesClass]
и предпринять соответствующие действия, учитывая как предоставленные параметры, так и статические правила, описанные в классе правил, в данном случае RulesManager_MyProject.m
. (Надеюсь, что это не слишком запутывало ...)
Однако, вместо импорта RulesManager_MyProject.h
во все мои файлы проекта, я хотел бы импортировать RulesManager.h
во все классы моего проекта и получить файл правил через что-то вроде NSClassFromString([NSString stringWithFormat:@"RulesManager_%@", [[[[NSBundle mainBundle] bundleIdentifier] componentsSeparatedByString:@"."] lastObject]])
. Однако это не работает, потому что вам нужно помнить, чтобы импортировать файл явно через #import "RulesManager_MyProject.h"
перед компиляцией. «Альтернативная» идея состояла бы в том, чтобы импортировать все соответствующие файлы RulesManager_<ProjectName>.h
в каждом классе, но затем вы получите проблему в вопросе 2 выше.
Причина, по которой я хочу сделать что-то подобное, так что я могу повторно использовать класс RulesManager.h/.m
во всех моих проектах Xcode (без копирования) и повторно использовать мои классы, которые используют диспетчер правил (опять же, без копирования), а вместо этого упростите вызов моего метода на что-то вроде [RulesManager shouldExecuteGivenParameters:parameters]
и будут иметь значение rulesClass
на основе текущего проекта Xcode.
Что приятно об этой реализации является то, что у меня есть уникальный центральный файл (RulesManager_<ProjectName>.h/.m
) в каждом проекте Xcode, где можно указать уникальные правила проекта в масштабах (например, для отладки), а также иметь класс общего между проектами (RulesManager.h/.m
) для реализации логики этих правил.
Спасибо! Я не понимал, что вы все равно можете вызвать класс, явно не «импортируя» его через '# import'. В какой-то момент мне бы хотелось/я должен * на самом деле * прочитать о том, как работает Obj-C, а не просто использовать его. –