Swift 1.1 ve Xcode 6.2'yi kullanma.
Tekil, özel içeren bir UIStoryboard'um var
UIViewController alt sınıf. Üzerinde bir tane var.
@IBOutlet tip bağlantısı
UIView bu denetleyiciden
UIView alt sınıf film şeridinde. Ayrıca bu görüşün alt görünümleri için benzer satış noktalarına sahibim. Şekil A'ya bakınız.
Fakat çalışma zamanında bu özellikler sıfırdır (Şekil B). Her ne kadar ben arayüzleri Arayüz Oluşturucu'ya bağladığımı anladım.
Düşünceler:
- Bir alt sınıfın alt sınıfını kullanmamın, başlangıçta karışıklık yaratan bir şey olması mümkün mü? Herhangi bir başlatıcıyı geçersiz kılmıyorum
-
awakeFromNib: nedense aranmıyor
- Belki de alt gösterimlere altyazılara bağlanmaz
Denediğim şeyler:
- Eşleştirme
@IBOutlet ve storyboard öğesi türleri tam olarak (yerine
UIView)
- Mülk ve çıkış siliniyor ve yeniden eklendi
Şekil A *
Şekil B
* Gizlenmiş kod
Figure A geçerli:
@IBOutlet private var annotationOptionsView: UIView!
@IBOutlet private var arrivingLeavingSwitch: UISegmentedControl!
Teşekkür ederim.
Genellikle bu, görünüm denetleyicinizin henüz görünüm hiyerarşisini henüz yüklemediğinden gerçekleşir. Bir görünüm denetleyicisi, yalnızca bir şey gönderdiğinde görünüm hiyerarşisini yükler.
view mesaj. Sistem, görüntü hiyerarşisini ekrana koyma zamanı geldiğinde böyle yapar;
prepareForSegue:sender: ve
viewWillAppear: geri döndü.
VC'niz görünüm hiyerarşisini henüz yüklemediğinden, çıkışlarınız hala sıfırdır.
VC'yi görüş hiyerarşisini yüklemek için zorlayarak
self.view.
Ürün> Temiz'i çalıştırmayı denediniz mi? Benim için çok benzer bir problem çözüldü.
Görünüm denetleyicinizi bir Storyboard veya NIB'den mi başlattınız veya doğrudan bir başlatıcı aracılığıyla başlattınız mı?
Sınıfınızı doğrudan başlatıcı ile başlattıysanız, çıkışlar bağlanmayacaktır. Interface Builder, sınıflarınızın özelleştirilmiş örneklerini oluşturur ve bu örnekleri tekrarlayan kod çözme için NIB'lere ve Storyboard'lara kodlar, sınıfları kendileri tanımlamaz. Sorununuz buysa, yalnızca UIStoryboard veya UINib üzerindeki yöntemleri kullanmak için denetleyicinizi oluşturduğunuz kodu değiştirmeniz gerekir.
Film şeridi, eklediğim başka kullanıcı arayüzlerini tanımamıştı. Çalışma zamanında tüm referanslar sıfırdı. Bu yüzden türetilmiş veri klasörümü temizledim ve sonra bu bağlantılar tekrar çalıştı.
Benim durumumda oldu, çünkü geçersiz kıldım
loadView ViewController alt sınıfımda yöntem, ancak eklemek unuttum
[super loadView]
-(void)loadView {
// blank
}
Geçersiz kıldığınızda
loadView yönteminde, alt görüntülemelerinizi yapmak sizin sorumluluğunuzdur. Bunu geçersiz kıldığınız için, arayüz oluşturucudan gelen görüşler, kakao nesnelerine dönüştürme şansı bulamaz ve böylece çıkışlar sıfır kalır.
Eğer viewView alt sınıfında loadView uygularsanız, o zaman sizin sorumluluğunuz, UI öğelerini storyboard / xib'den kodlara yükler.
Ya da sadece arayın
[super loadView];
Böylece, süper sınıf, storyboard / xib'i kod içine yükleme şansını yakalar.
Bu, özel koleksiyon görünüm hücremde bana oluyordu. Benim registerClassforReuseIdentifier yöntemini registerNib ile değiştirmem gerekiyor. Bu benim için sorunumu çözdü.
Arayabilirsin
controller.view IBOutlets'i başlatmak için görünümü yüklemeye zorlamak için değerleri atayabilirsiniz.
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if (segue.identifier == "identifier") {
let controller = segue.destinationViewController as! YourController
let _ = controller.view //force to load the view to initialize the IBOutlets
controller.your_IBOutlet_property = xxx
...
controller.delegate = self
}
}