6

Trong ứng dụng dựa trên thanh tab, Nếu tôi có một bộ điều khiển được đẩy trong ngăn điều hướng từ một tab và sau đó, khi một tab khác đang hoạt động, tôi thử bật bộ điều khiển đó, nó sẽ không được phát hành trừ khi tôi bật nó mà không có hoạt ảnh .UIKit không phát hành bộ điều khiển nếu nó không bị xóa với hoạt ảnh?

này hoạt động:

[navigationController popToRootViewControllerAnimated:NO]; 

Và đây không:

[navigationController popToRootViewControllerAnimated:YES]; 

Có ai có bất kỳ ý tưởng về những gì đang xảy ra ở đây? Thông số animated có được sử dụng không đúng cách không?

UPDATE:

của Apple thông báo với tôi rằng đây thực sự là một lỗi trong UIKit, và họ đánh dấu nó như là cấp bách và phân công ai đó để nó. Nó có thể đã được giải quyết trong các bản phát hành mới nhất nhưng tôi không có thời gian để kiểm tra.

+1

Âm thanh như một lỗi trong UIKit. Nếu bạn có thể xác nhận nó bằng một dự án đơn giản, hãy gửi nó cho Apple. –

+0

Tôi vừa tạo một dự án mẫu để xác nhận nó, và tôi có thể làm điều đó. Tất nhiên nó không phải là cái gì đó đang xảy ra với * mọi * sử dụng UINavigationController. Nó sẽ xảy ra nếu bạn có một UITabBarController với một bộ điều khiển điều hướng bên trong một tab, và từ một tab khác bạn bật trình điều khiển điều hướng. Những gì tôi nhận thấy là, nếu bạn có nhiều hơn 1 bộ điều khiển xem trong ngăn xếp, tất cả chúng đều được phát hành ngoại trừ cái cuối cùng, vẫn giữ nguyên cho đến khi bạn chọn lại tab khác (thẻ có bộ điều hướng). – eugeniodepalo

+1

Nếu bằng bộ điều khiển "cuối cùng" có nghĩa là bộ điều khiển gốc, thì điều này là thích hợp: "Nếu bộ điều khiển xem ở đầu ngăn xếp là bộ điều khiển chế độ xem gốc, phương pháp này không làm gì cả ... bạn không thể bật mục cuối cùng ngăn xếp. " (Từ tài liệu cho 'popViewControllerAnimated:'.) Bạn hiếm khi phải lo lắng về việc khi nào UIKit giải phóng các đối tượng. Chỉ cần chắc chắn rằng bạn làm một phần của bộ nhớ quản lý. Ai biết được, có lẽ các khuôn khổ giữ cho một đối tượng để tái chế nó sau này? Hoặc có thể không. Vấn đề là, bạn có thể dựa vào chúng để được thử nghiệm tốt. – Felixyz

Trả lời

0

những gì Dshutsi gợi ý là đúng. Nếu bạn muốn các thông báo được loại bỏ, đó là tốt hơn được gọi là trong phương thức viewDidUnload của bộ điều khiển. Phương thức này được gọi khi bộ điều khiển được lấy ra khỏi ngăn xếp. Tôi chỉ trích dẫn điều này bởi vì chúng tôi không thể bỏ phiếu bình luận như một câu trả lời.

+0

Trong tài liệu được viết rằng viewDidUnload chỉ được gọi trong điều kiện bộ nhớ thấp. Tôi đoán đây không phải là trường hợp. Trong khi điều này không thực sự là câu trả lời tôi đang tìm kiếm (bộ điều khiển * nên * được phát hành), tôi sẽ chấp nhận nó vì nó là giải pháp làm việc duy nhất bên cạnh việc chuyển YES tới tham số hoạt hình! Cảm ơn bạn. – eugeniodepalo

0

Nếu vấn đề chính là các thông báo quan sát được, tại sao không loại bỏ các quan sát viên trong phương thức "- (void) viewWillDisappear: (BOOL) animated" -?

+0

Vì tôi vẫn muốn nhận được thông báo nếu bộ điều khiển bị ẩn (ví dụ người dùng chọn một tab khác). Tôi nghĩ rằng viewWillDisappear: được gọi mỗi khi bộ điều khiển không được hiển thị trong màn hình, phải không? – eugeniodepalo

+0

Bạn có thể thử phương thức viewDidUnload sẽ được gọi khi khung nhìn được phát hành từ bộ điều khiển của nó. Hãy xem tài liệu trên: http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006926-CH3-SW36 – Dshutsi

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