2012-09-24 30 views
5

Không thể hiểu được điều gì đang xảy ra.Tại sao UIViewController được phân phối lại mặc dù nó nằm trên màn hình

Tôi đang xây dựng một ứng dụng iPhone sử dụng chế độ xem cuộn với phân trang. Quan điểm cuộn chứa một số quan điểm, có điều khiển xem được nạp lên từ kịch bản bằng cách gọi:

[self.storyboard instantiateViewControllerWithIdentifier:@"identifier"]; 

tôi thêm các bộ điều khiển nhằm một mảng có thể thay đổi và thêm quan điểm của họ để xem di chuyển như subviews. Sau khi xuất hiện trên màn hình, bộ điều khiển chế độ xem được phân phối lại, vì vậy các tác vụ mục tiêu không hoạt động nữa.

Khi tôi kích hoạt Zombie Objects, trình gỡ lỗi viết này trên gửi một hành động để điều khiển:

*** - [StreamingViewController performSelector: withObject: withObject:]: tin nhắn gửi đến 0x914f0e0 dụ deallocated

Tôi thực sự cố gắng khắc phục điều này nhưng không thành công, vì vậy mọi trợ giúp đều được đánh giá cao.

Một số mã khác:

StreamingViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"Streaming View Controller"]; 

[self.pageControllers addObject:controller]; // adding view controller to mutable array 

controller.view.frame = self.scrollView.frame; 
[self.scrollView addSubview:controller.view]; 
+0

Trang được xác định như thế nào? – mark

+0

pageControllers được khai báo là @property riêng tư – boeqqsh

Trả lời

3

Nếu bạn đang sử dụng điều ARC thả ra thường khi bạn không còn có một con trỏ hợp lệ để một cái gì đó. Vì vậy, trong trường hợp của bạn bộ điều khiển xem của bạn đi ra khỏi phạm vi và được phát hành. Chế độ xem vẫn được giữ lại vì nó đang được giữ bởi self.scrollView. Thêm bộ điều khiển khung nhìn vào một mảng sẽ sửa lỗi đó nhưng chỉ khi mảng đã được khởi tạo chính xác. Poperties không được instantiated tự động. Sử dụng thuộc tính cũng không khởi tạo nó cho bạn trừ khi bạn ghi đè lên người truy cập. Bởi vì bản chất của Cocoa bạn sẽ không nhận được bất kỳ lỗi hoặc tin nhắn bằng cách cố gắng thêm một đối tượng vào một thuộc tính nil vì nó là mã hoàn toàn hợp lệ.

Kiểm tra cách bạn đang tạo pageControllers và đảm bảo rằng bạn đang instantiating nó một cách chính xác trước khi sử dụng nó.

ví dụ: self.pageControllers = [[NSMutableArray alloc] init];

+0

Nó chỉ là dòng mã này. Cảm ơn bạn rất nhiều! :) – boeqqsh

+0

3 năm sau và vẫn hữu ích! Cảm ơn bạn! – PaperThick

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