Tôi có một số UICollectionViewController
quản lý chế độ xem bộ sưu tập sử dụng bố cục khác nhau cho các trạng thái ứng dụng khác nhau. Tôi đang sử dụng -setCollectionViewLayout:animated:
để chuyển đổi giữa các bố cục khác nhau. Tôi gặp phải lỗi truy cập không hợp lệ và sẽ vô cùng hữu ích khi biết những gì thực sự sở hữu (ví dụ: giữ tham chiếu strong
) bố cục hiện tại của chế độ xem bộ sưu tập.Quyền sở hữu bố cục của UICollectionViewController (self.collectionView.collectionViewLayout so với self.collectionViewLayout)
Sau khi gọi -setCollectionViewLayout:animated:
, tôi đã nhận thấy như sau (nơi self
là UICollectionViewController
):
self.collectionView.collectionViewLayout
trả về cách bố trí mới.self.collectionViewLayout
vẫn trả lại bố cục cũ.
này dẫn tôi đến kiểm tra UICollectionView Class Reference, điều này giải thích hành vi này:
collectionViewLayout
Cách bố trí đối tượng sử dụng để khởi tạo bộ điều khiển xem bộ sưu tập. (Read-only)
@property (nonatomic,readonly) UICollectionViewLayout *collectionViewLayout
Thảo luận
Thuộc tính này chứa các đối tượng bố trí bạn truyền cho initWithCollectionViewLayout: phương pháp. Đối tượng bố trí trong thuộc tính này không được cập nhật để phản ánh các thay đổi đối với chế độ xem bộ sưu tập. Bạn có thể sử dụng thuộc tính này để tham chiếu đến đối tượng bố cục mà ban đầu bạn đã định cấu hình chế độ xem bộ sưu tập để sử dụng.
OK. Vì vậy, self.collectionViewLayout
là một tham chiếu yếu (hoặc là nó?) Với bố cục ban đầu và self.collectionView.collectionViewLayout
là tham chiếu mạnh mẽ đến bố cục hiện tại.
Để xác nhận điều này, tôi đã đi sâu vào trình gỡ lỗi, nhưng không thể tìm thấy số thực tế UICollectionView
được cho là thuộc sở hữu của UICollectionViewController
. Thay vào đó, biến số _view
của bộ xem bộ sưu tập là một phiên bản của UICollectionViewControllerWrapperView
. Whaaaat?
toàn bộ kinh nghiệm này để lại cho tôi với các câu hỏi sau:
- đâu là thực tế
UICollectionView
lưu trữ trong mộtUICollectionViewController
? - Có
self.collectionViewLayout
giữ tham chiếustrong
đối với bố cục ban đầu không?