2016-04-01 39 views
0

Görünümümde bazı çıkışlar var ve bunları programlı olarak bir işlevde düzenlemeye çalışıyorum."beklenmedik şekilde sıfır bulundu" outDiskLoad

Xcode diyor ki: Ancak isteğe bağlı değerini

unwrapping ederken sadece super.viewDidLoad() sonra viewDidLoad() yılında çıkışları düzenlerken

beklenmedik, nil buldum, bir cazibe gibi çalışır. fonksiyonu ile

:

func test(){ 
    localDeviceNameView.stringValue = "some stuff" //Found nil here 

} 

viewDidLoad olarak:

override func viewDidLoad() { 
    super.viewDidLoad() 

    localDeviceNameView.stringValue = "some stuff" //Works well 

} 

nasıl işe yapabilirsiniz?

+0

'self.localDeviceNameView.stringValue' öğesini deneyin – zcui93

+0

Daha önce denedim :( – Lawris

+1

Daha sonra kod, orijinal kod satırı, tam sınama '' test() ', kod çağırma '' test()', 'localDeviceNameView'' ile ilgileniyor – zcui93

cevap

2

Sen değişkeni didSet kullanabilirsiniz diyoruz. Şunun gibi:

@IBOutlet var localDeviceNameView : UIView! { 
    didSet { 
    localDeviceNameView.stringValue = "some stuff" 
    } 
} 

Ne bu yaklaşımla iyi bunu ELVES/Storyboard yüklendiğinde doğru localDeviceNameView ayarlanır sadece stringvalue, set olmasıdır.

Bence bu tam olarak ihtiyacınız olan şey.

+0

'da açıklandığı gibi didSet kullanın. Bu nedenle, bu beyandan sonra değerinimi nasıl değiştirebilirim? – Lawris

+1

Öyleyse açıkça sadece bunu kullanamazsınız. UIViewController'ınızın yaşam döngüsünü ve Swift'de nasıl çalıştıklarını anlamalısınız. Bir isteğe bağlı isteğe bağlı (cf 'UIView!') Erişmeye çalıştığınızda, _might_ hala nil olacaktır (değil, ama olabilir). Bu yüzden hazırlıklı olmanız ve doğrudan erişmemeye çalışmanız gerekiyor. Bunun yerine, 'test()' yönteminde, localDeviceNameView? .stringValue = "bazı şeyler" gibi erişmeyi deneyin. " – aimak

+0

Okey teşekkürler anlıyorum :) – Lawris

1

Görünümler tamamen yüklenmeden önce test() numaralı telefonu aramaya çalışıyorsunuz, bu yüzden henüz mevcut değiller. bu şekilde yapın:

class MyController: UIViewController { 
    var something = "" 

    override viewDidLoad() { 
     super.viewDidLoad() 
     localDeviceNameView.stringValue = something 
    } 
} 

Yoksa tüm görünümler yüklenen emin daha (viewDidLoad() denirdi) sadece you'r test() yöntem

+0

içinde denemeye çalışırken "beklenmedik bir şekilde sıfır ..." iletisi alıyorum. muhtemelen doğru – Lawris

+0

Bu yöntemle ilgili bir problemim var, değişkeni "bir şey" olarak değiştirdiğimde, ' t ViewController'da güncelleme ... Bu bağlantılı mı yoksa değil mi? – Lawris

+0

Hayır, cevabım yalnızca uygulamanızın neden çökeceğiyle ilgili. Bunları birbirine bağlamanız gerekiyorsa, @aimak cevabı –

İlgili konular