2016-03-31 15 views
0

İlk: @IBAction afegeixGrafic kullanırken kaydırma görünümünün sıfır olması mümkün olabilir, ancak @IBAction func button kullanıldığında '' değil mi? Ben sınıfa GraficViewControllerNeden benim scrollView'm nil?

class GraficsBalancGlobalViewController: GraficViewController { 
    @IBAction func afegeixGrafic(sender: NSButton) { 
    addNewGrafic() // which is set on the GraficViewController 
    } 
} 

alt sınıfı olan sınıfını GraficsBalancGlobalViewController var Ve ben on line IBActionafegeixGrafic programım çöküyor gerçekleştirirken aşağıda işaretlenmiş:

class GraficViewController: NSViewController, GraficViewDataSource { 
    @IBAction func button(sender: NSButton) { 
    addNewGrafic() 
    } 

    func addNewGrafic() { 
    let frame = NSRect(x: 0, y: 0, width: self.view.bounds.width , height: self.view.bounds.width * 0.25) 
    let nouGrafic = GraficView(frame: frame) 
    scrollView.addSubview(nouGrafic) <---- BREAK here! 
    } 

    @IBOutlet weak var scrollView: NSView! 
    //...more code 
} 

derleyici diyor:

fatal error: unexpectedly found nil while unwrapping an Optional value

fakat GraficViewController içindeki düğmenin (IBAction) çalışması wel l !! Yani

Bu da deneyin .. ben sorun scrollview ile ilgili olduğunu varsayalım, ama .. O başlatılır edilebilir ne hiçbir fikrim yok:

@IBOutlet weak var scrollView: NSView? { 
    didSet { 
    guard let sview = scrollView else { 
     addNewGrafic() 
     return // because scrollView is nil for some reason, but don't work 
    } 
    } 
} 

The call stack

enter image description here

Tam kodu:

class GraficsBalancGlobalViewController: GraficViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do view setup here. 
} 

@IBAction func afegeixGrafic(sender: NSButton) { 
    //performSegueWithIdentifier("Nou Grafic", sender: nil) 
    //let viewController = storyboard!.instantiateControllerWithIdentifier(identifier!) as! GraficsBalancGlobalViewController 
    addNewGrafic() 

} 

@IBAction func eliminaGrafic(sender: NSButton) { 
} 

} 

enter image description here

+0

'scrollView' her zaman son kod bloğunda nil olacak - o bekçi denetliyor ne - bu işlem başka sadece içine düşer ne zaman –

+0

evet, kafa karıştırıcı olabilir üzgünüm. Son kod parçası umrumda değil, önemli olanıdır. –

+0

Bize hata noktasında çağrı yığını göster. –

cevap

1

GraficsBalancGlobalViewController'ı nasıl başlattığınız nedeniyle sıfır. Bunu bir xib veya bir storyboard ile ayarladınız, ancak bunu bir tane olmadan gerçekleştirdiniz. Bunu yapın:

let viewController = storyboard.instantiateControllerWithIdentifier(identifier) as GraficsBalancGlobalViewController 

Değil Bu:

let viewController = GraficsBalancGlobalViewController() 
+0

nil görünüyor görünür Ben viewController = GraficsBalancGlobalViewController() '? Bu konuda yeniyim. Ve tam olarak bunu nerede kullanmalıyım: 'viewController = storyboard.instantiateControllerWithIdentifier (tanımlayıcı) GraficsBalancGlobalViewController' olarak mı? Bana nasıl çalıştığını biraz açıklar mısınız? –

+0

GraficsBalancGlobalViewController sınıfını hangi sınıftan başlatırsa onu bu şekilde oluşturmalıdır. Bir yerde (yukarıda belirtilmemiş) varsayalım, self.presentViewController gibi bir satır var (viewController, canlandırılmış: true, completion: nil). Söylediklerimin hemen üstünde. Eğer bu şekilde başlatılmış ve itilmişse: self.performSegueWithIdentifier ("GraficsBalancGlobalViewControllerID"), gönderen: nil) ve hala bir nil var demektir, çünkü IBOutlet'i oluşturduğunuzda bir şey bozuldu.Bu durumda @IBOutlet zayıf var scrollView öğesini silin ve arayüz oluşturucusundan tekrar sürükleyin. –

+0

Bence kodum o kadar gelişmiş değil :(, bunu beklediniz mi (yukarıdaki kodu ekliyorum), hala nasıl yapacağımı öğreniyorum –