2013-05-03 20 views
17

Tôi đã đặt chế độ xem trong tệp NIB, sau đó thêm lớp con UIView của tôi làm chủ sở hữu tệp.Tải chế độ xem từ NIB, IBOutletCollection là không mặc dù các IBOutlet khác đang hoạt động tốt

Các lớp con trông như thế này:

@property (nonatomic, weak) IBOutlet UILabel *categoryLabel; 
@property (nonatomic, weak) IBOutletCollection(UIImageView) NSArray *images; 

Các thuộc tính còn yếu vì điều này: https://stackoverflow.com/a/7729141/1016515

Sau đó, tôi có dây lên nhãn và UIImageViews trong nib, từ giao diện cho chủ sở hữu tập tin .

Sau đó, trong phần awakeFromNib của lớp con, tôi đã làm điều này:

[[NSBundle mainBundle] loadNibNamed:@"CategoryButton" owner:self options:nil]; 
NSLog(@"label: %@",self.categoryLabel); 
NSLog(@"images: %@",self.images); 

tôi mong đợi để xem địa chỉ của các categoryLabel và hình ảnh. Thay vào đó, tôi thấy rằng nhãn danh mục là tốt và các hình ảnh là nil.

Điều này khá khó hiểu, vì các khai báo cho imagescategoryLabel giống hệt nhau. Tại sao một người làm việc và người kia thất bại?

Trả lời

75

Tôi đang nói điều này vì tôi không tìm thấy câu hỏi ở đâu cả, nhưng có vẻ như một lỗi khá dễ thực hiện nếu bạn quen làm việc với IBOutlets chứ không phải IBOutletCollections.

Tôi đã tạo các thuộc tính weak vì đó là những gì tôi thường làm cho IBOutlets vì những lý do được thảo luận trong một câu hỏi khác.

Những gì tôi bỏ qua để nhận ra là IBOutletCollection là một biến cá thể của lớp, không chỉ là một tham chiếu tùy ý vào phân cấp khung nhìn. Do đó, nếu nó là một thuộc tính yếu, thì NSArray * sẽ ngay lập tức được giải phóng vì hệ thống phân cấp khung nhìn không giữ lại nó như đối với các thuộc tính IBOutlet khác.

Việc sửa chữa rất đơn giản, làm cho tài sản strong:

@property (nonatomic, strong) IBOutletCollection(UIImageView) NSArray *images; 

Cập nhật: Theo this answer, hầu hết các IBOutlets nên mạnh mẽ, trừ khi họ phải yếu để tránh một chu kỳ giữ lại. Điều này là mới, và hầu hết các tài liệu vẫn nói rằng các cửa hàng nên yếu.

+0

Hoạt động. Dễ dàng bỏ lỡ điều này. Tư tưởng cùng một cách yo idid! –

+0

Bỏ lỡ nó quá vì yếu, nó tự động nils ra và không sụp đổ với một forin (foreach, bất cứ điều gì) – txulu

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