2014-06-16 17 views
5

Swift'de NSViewController nasıl oluşturulur?

  var appBundle = NSBundle.mainBundle() 
     let controller: ViewController = ViewController.init(nibName:  "ViewController", bundle: nil) 
    self.window.contentView.addSubview(controller.view) 
    controller.view.frame = self.window.contentView.bounds 

Benim şimdiki Swift kodu iki hataları oluyor. Biri, "type name'den sonra beklenen üye adı veya yapıcı çağrısı" ve diğeri "()" ViewController "öğesine dönüştürülemez. Referans için ViewController, NSViewController öğesinden devralınan bir sınıftır.

Her iki hata da ortaya çıkmaktadır. ... önceden kod sayesinde ikinci satırda swift ise

cevap

7

bunları örneğini sınıflara init demiyorlar sen init dışarıda bırakın ve sadece doğru tip adından sonra argümanları koyun:

let controller = ViewController(nibName: "ViewController", bundle: NSBundle.mainBundle()) 

veya nibName no'larıyla eşleşmiyorsa, sınıfın ben:

let controller = ViewController() 
+2

Ve NSBundle.mainBundle (geçmek zorunda) paket olarak. Dokümantasyon, nil'in iyi olduğunu söylüyor, ama nil'i demet olarak geçmeye çalışıyorsanız, hata mesajı alırsınız. – juniperi

+0

Teşekkürler @juniperi – drewag

+1

@juniperi bana sadece daha fazla saat hayal kırıklığı kurtardı. Paket için bir NSViewController geçişini başlatmaya çalışıyordum ve "Sağlanan argümanları kabul eden '__conversion' için bir aşırı yük bulamadım" hatasını almaya devam ettim. NSBundle.mainBundle() yöntemi bu sorunu giderir. Teşekkürler – mike

0

bu benim app boyunca çalışması için görünüm denetleyicisi küresel sabit başlatılmasını yapmak zorunda kaldı. Benim beyin bozucu sonra ben (. AppDelegate sınıfının dışında koyarak "nil" hatasız benim için çalışır) o kadar küresel hale lokal çalıştığını tespit

//global constant 
let viewController = ViewController(nibName: "ViewController", bundle: NSBundle.mainBundle()) 

class AppDelegate: NSObject, NSApplicationDelegate { 
    @IBOutlet var window: NSWindow 

func applicationDidFinishLaunching(aNotification: NSNotification?) { 

    //links and loads the view to the main window 
    self.window.contentView.addSubview(viewController.view) 
    viewController.view.frame = self.window.contentView.bounds 

    //works locally and elsewhere as long as viewController is global! 
    viewController.statusField.stringValue = "TESTING" 
    println(viewController.statusField) 

    } 
} 
+0

Ayrıca paket: nil viewController sabiti ile de çalışır. Apple'ın dokümanları yanlış değil. Bu zaten 10.9'da. nil mainBundle'ı belgelere göre yükler. ve denetleyicinin = ViewController() işlevini, aynı sınıf adına sahip bir global olarak da sağlar. Üçünü de test ettim. – Goodtime