Копировать NSView в cocoa/objective-c

Я не вижу никакого способа скопировать NSView и создать идентичный объект NSView. Я вижу google хиты о "использовании NSData", но я этого не понимаю.

Ответы

Ответ 1

Чтобы прямо "скопировать" NSView, представление должно реализовать протокол NSCopying. К сожалению, NSView не делает.

К счастью, он реализует протокол NSCoding, что означает, что мы все равно можем дублировать представление, например:

NSData * archivedView = [NSKeyedArchiver archivedDataWithRootObject:myView];
NSView * myViewCopy = [NSKeyedUnarchiver unarchiveObjectWithData:archivedView];

И вой! Теперь у вас есть дубликат myView.


Изменить: (версия Swift)

let archivedView = NSKeyedArchiver.archivedData(withRootObject: myView)
let myViewCopy = NSKeyedUnarchiver.unarchiveObject(with: archivedView)

(archivedView имеет тип Data, а не NSData)