2010-06-24 21 views
13

Tôi không thể thấy bất kỳ cách nào để sao chép NSView và tạo một đối tượng NSView giống hệt nhau. Tôi thấy số truy cập của google về "sử dụng NSData" nhưng tôi không hiểu điều đó.Sao chép NSView trong ca cao/mục tiêu-c

Trả lời

24

Để thẳng "sao chép" một NSView, chế độ xem phải triển khai giao thức NSCopying. Thật không may, NSView thì không.

May mắn thay, nó không thực hiện NSCoding giao thức, có nghĩa là chúng ta vẫn có thể lặp lại một cái nhìn như:

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

và thì đấy! Bạn hiện có bản sao của myView.


Edit: (phiên bản Swift)

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

(archivedView là loại Data, không NSData)

+3

Lưu ý rằng nếu bạn phân lớp, bạn sẽ cần phải thực hiện hỗ trợ lưu trữ. Các tài liệu biết tất cả. – bbum

+0

Trong mọi trường hợp mà tôi phân lớp - ngay cả khi tôi không có thêm dữ liệu nhưng chỉ có một vài phương pháp? – Nektarios

+0

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

Các vấn đề liên quan