2013-08-07 4 views
0

Мне нужен способ условного определения суперкласса класса на основе значения в NSUserDefaults.Объявление интерфейса iOS на основе оценки #if

Я знаю, что можно определить различные интерфейсы, основанные на директиве #ifdef. Интересно, может ли это быть достигнуто с помощью директивы #if? Если нет, есть ли другой способ достичь моей цели?

Спасибо!

ответ

1

Вы не можете сделать это с помощью директивы препроцессора, поскольку она будет определена во время компиляции, а NSUserDefaults - это то, что вы хотите проверить во время выполнения.

Я думаю, что эта нить может вам помочь Dynamically change an object's superclass В любом случае, вы уверены, что это лучшее, что вы можете сделать по дизайну? Почему вы изменили суперкласс во время выполнения на основе чего-то в NSUserDefaults?

+0

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

+1

Тем не менее я не уверен, что это хороший шаблон. Обычно разные наследования означают совершенно разные вещи, в то время как разные подклассы определенного класса означают, что «что-то добавлено в этот класс, что-то может быть переопределено». Рассматривали ли вы использование протоколов или категорий вместо разных наследований? – Vik

+0

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

Смежные вопросы