2010-06-24 16 views

Respuesta

24

Para "copiar" directamente un NSView, la vista tiene que implementar el protocolo NSCopying. Desafortunadamente, NSView no lo hace.

Afortunadamente, no implementar el protocolo NSCoding, lo que significa que todavía podemos duplicar una vista como:

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

y listo! Ahora tiene un duplicado de myView.


Editar: (versión Swift)

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

(archivedView es de tipo Data, no NSData)

+3

Tenga en cuenta que si subclase, que necesita para implementar el soporte de archivado. Los documentos lo saben todo. – bbum

+0

En todos los casos que subclase, ¿incluso cuando no tengo datos agregados sino solo un par de métodos? – Nektarios

+0

Nektarios: http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmImplementCopy.html –