Можете ли вы добавить свойство во время выполнения при кодировании с Objective-C - PullRequest
4 голосов
/ 28 апреля 2009

Мне было интересно, возможно ли во время выполнения динамически добавлять новые свойства в экземпляр объекта Objective-C?

Моя первоначальная мысль состояла в том, чтобы просто переопределить getValueForKey, чтобы "подделать" свойство, но, похоже, это не работает с CoreAnimation. Чего я хочу добиться, так это уметь анимировать пользовательские свойства. Я смог заставить это работать, если я создаю подкласс CALayer и добавляю объявленные свойства в мой подкласс. Если я пытаюсь использовать стратегию getValueForKey / setValueForKey, мне кажется, что CoreAnimation не заботится об этом и явно ищет объявленные свойства.

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

Спасибо

Peter

Ответы [ 2 ]

3 голосов
/ 29 апреля 2009

Вы пробовали переопределить valueForUndefinedKey: вместо этого? (Я делаю это на пользовательском подклассе NSObject, который может иметь различные свойства, имена которых извлекаются из базы данных.)

1 голос
/ 29 апреля 2009

Вы можете переопределить -respondsToSelector: и -doesNotUnderstand: для динамической обработки входящих сообщений, если это необходимо.

...