2010-06-24 7 views
13

Ich kann keine Möglichkeit zum Kopieren eines NSView und Erstellen eines identischen NSView-Objekts sehen. Ich sehe google hits über "Verwenden Sie eine NSData", aber ich verstehe das nicht.Kopieren NSView in Kakao/Ziel-c

Antwort

24

Um ein NSView "kopieren" zu können, muss die Ansicht das Protokoll NSCopying implementieren. Leider funktioniert NSView nicht.

Glücklicherweise ist es nicht implementiert das NSCoding-Protokoll, das bedeutet, dass wir immer noch eine Ansicht wie duplizieren:

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

und voila! Sie haben jetzt ein Duplikat von myView.


Edit: (Swift-Version)

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

(archivedView ist vom Typ Data, nicht NSData)

+3

Beachten Sie, dass, wenn Sie eine Unterklasse, werden Sie Archivierungsunterstützung implementieren müssen. Die Ärzte wissen alles. – bbum

+0

In jedem Fall, dass ich Unterklasse - auch wenn ich keine Daten hinzugefügt habe, aber nur ein paar Methoden? – Nektarios

+0

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

Verwandte Themen