2012-05-16 28 views
12

UII cần sao chép, tự điều khiển hoặc self.view, tôi đã cố gắng:Clone hoặc Copy UIViewController hoặc UIView

UIView* viewOfSelf =[self.view copy]; 
UIViewController* controller = [self copy]; 

UIView* viewOfSelf =[self.view mutableCopy]; 
UIViewController* controller = [self mutableCopy]; 

Lỗi này là:

-[UIViewController mutableCopyWithZone:]: unrecognized selector sent to instance 0xb803490 
    -[UIView copyWithZone:]: unrecognized selector sent to instance 0x6e0acb0 
+0

lớp 'tự' là gì? 'MyViewController'? Tôi nghĩ rằng không có bản sao có thể thay đổi của 'UIView' và' UIViewController' – Raptor

Trả lời

30

định sử dụng -

NSData *tempArchiveView = [NSKeyedArchiver archivedDataWithRootObject:self.view]; 
UIView *viewOfSelf = [NSKeyedUnarchiver unarchiveObjectWithData:tempArchiveView]; 

Tương tự như vậy -

NSData *tempArchiveViewController = [NSKeyedArchiver archivedDataWithRootObject:self]; 
UIViewController *controller = [NSKeyedUnarchiver unarchiveObjectWithData:tempArchiveViewController]; 
+2

Không nhận được mọi thứ, chẳng hạn như cử chỉ tùy chỉnh, v.v. – jjxtra

+0

Hmm không nhận được UIImageView của tôi mà tôi đã xem là chế độ xem phụ của chế độ xem mà tôi đã sao chép. –

5

Đối với một đối tượng được copyable nó phải thực hiện giao thức NSCopyingUIView lớp học cũng không phải UIViewController lớp học không.

Nếu bạn muốn sao chép chế độ xem, tôi chắc chắn bạn đang làm điều gì đó sai. Việc sao chép phải được thay thế bằng cách tái sử dụng UIView giống như trong UITableView sử dụng phương thức dequeueReusableCellWithIdentifier:.

Sao chép bộ điều khiển chế độ xem chắc chắn là chống mẫu. Nếu bạn muốn bản sao chính xác của bộ điều khiển xem mà bạn đã có - hãy tạo một phiên bản mới của nó với các tham số giống như hiện tại.

+1

Câu trả lời của Eventhough Rishi cũng làm việc cho tôi, nhưng việc tạo ra các cá thể mới được chứng minh là một giải pháp đáng tin cậy hơn cho vấn đề của tôi. Cảm ơn! – Myxtic

4

Đáng tiếc là tôi chưa được phép bình luận, nhưng giải pháp Rishi của có một vấn đề: nó không sao chép NSLayoutConstraint s. Vì vậy, nếu bất kỳ quan điểm của bạn đang sử dụng autolayout, những người sẽ không được sao chép. Tôi đang viết một mini-lib để giải quyết điều đó và sẽ đăng nó lên github khi hoàn thành. Thật không may, tôi đã không tìm thấy một giải pháp sẵn sàng để sử dụng bất cứ nơi nào.

// Sửa

Xin lỗi, những gì tôi đã viết trước đây là không hoàn toàn chính xác. Tôi đã làm một số nghiên cứu thêm và nó chỉ ra rằng trên mặc định, các NSLayoutConstraint s trong chế độ xem lưu trữ không được lưu. Tuy nhiên, bạn thực sự có thể chỉ định nếu bạn muốn lưu trữ một ràng buộc bằng cách đặt thuộc tính shouldBeArchived của nó thành YES. Sau đó, ngay cả sau copy giả mạo này, bạn vẫn giữ lại các ràng buộc đúng trong chế độ xem được sao chép.

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