2013-05-03 18 views
17

Bir NIB dosyasında bir görünüm belirledikten sonra UIView alt sınıfımı dosya sahibi olarak ekledim.NIB'den bir görünüm yükleniyor, IBOutletCollection, diğer IBOutlet'lar düzgün çalışıyor olsa bile nil

alt sınıf şuna benzer:

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

özellikleri bu nedenle zayıftır:

https://stackoverflow.com/a/7729141/1016515 Sonra dosya sahibine görünümünden etiket ve kalem ucundaki UIImageViews, kablolarla .

Sonra alt sınıfının awakeFromNib kısmen Bunu yapan:

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

Ben categoryLabel ve görüntülerin adreslerini görmek bekleniyor. Bunun yerine, kategori etiketinin iyi olduğunu ve görüntülerin nil olduğunu buldum.

Bu oldukça şaşırtıcıdır, çünkü images ve categoryLabel bildirimleri aynıdır. Neden biri çalışıyor ve diğeri başarısız?

cevap

75

Bunu yapıyorum çünkü soruyu hiçbir yerde bulamadım, ancak IBOutletCollections ile değil, IBOutlet'lerle çalışırken alışmak oldukça kolay bir hata gibi görünüyor.

weak özelliklerini yaptım çünkü bu, IBOutlets için genellikle başka bir soruda tartışılan nedenlerden dolayı yapıyorum.

Gerçekleştirmek için ihmal ettiğim şey, IBOutletCollection öğesinin, yalnızca görünüm hiyerarşisine rastgele bir başvuru olarak değil, sınıfın bir örnek değişkeni olduğudur. Bu nedenle, zayıf bir özellikse, görünüm hiyerarşisi diğer IBOutlet özellikleri için olduğu gibi koruduğu için NSArray * hemen yayınlanacaktır.

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

Güncelleme: onlar korumak döngüsünü önlemek için zayıf olmalı sürece this answer göre, hemen hemen tüm IBOutlets, güçlü olmalıdır

düzeltme basit, özelliği strong olun. Bu yeni ve çoğu belge hala satış noktalarının zayıf olması gerektiğini söylüyor.

+0

Çalışmaları. Bunu kaçırmak çok kolay. Aynı şekilde düşünmüştün! –

+0

O da cevapsız çünkü zayıf olma, otomatik olarak nils dışarı ve bir forin ile çökmesini (foreach, ne olursa olsun) – txulu