Допустим, у меня есть Superclass
и экземпляр этого класса superclassObject
.
Я создаю производный ClassA
.
Как создать (инициализировать) объект classAObject
производного класса таким образом, чтобы все унаследованные поля были равны полям superclassObject
?
Конечно, я могу просмотреть все поля и вручную скопировать значения, такие как classAObject.property = [superclassObject.property copy]
. Но проблема с этим подходом в том, что я могу не знать (или не иметь доступа) ко всем ivars/свойствам суперкласса. Есть ли более простой (и более общий) способ?
Кажется, я упускаю что-то действительно элементарное...
Я пытаюсь сделать это, потому что получаю уже инициализированный UIView (с рамкой, цветом фона, маской автоматического изменения размера и т. д.) и хочу заменить его своим пользовательским представлением с теми же параметрами.
Обновление 1
Я нашел этот вопрос, и ответ там говорит, что это
обычно не поддерживается ни на одном языке OO
тем не мение
В Objective-C это возможно в некоторых случаях
Хорошо, если он не поддерживается, что мне делать? Если он поддерживается, как мне этого добиться?
Обновление 2
Кажется, я нашел решение для моего конкретного случая этой общей проблемы, которое я протестирую и сообщу об этом завтра.
Однако это привело меня к другой идее: что, если я использую NSCoder для кодирования superclassObject
(если он, конечно, реализует <NSCoding>
), а затем вызываю [[ClassA alloc] initWithCoder:coder]
с кодером, который знает данные из закодированного superclassObject
? Отказ от ответственности: Ну, я не очень хорошо разбираюсь в концепциях кодирования (или даже совсем не разбираюсь), так что последнее предложение может быть чепухой.
classAObject = (ClassA *)superclassObject
? В любом случае, не могли бы вы объяснить оба случая или разницу между ними? - person adubr   schedule 18.05.2011NSCoding
меня вдохновила, но я еще недостаточно обдумал ее, чтобы понять, будет ли она работать. Удачи! - person jscs   schedule 18.05.2011