2014-06-16 5 views
5

Mein aktueller Swift Code vonWie Instanziieren NSViewController in Swift?

  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 

wird immer zwei Fehler. Einer ist "erwarteter Mitgliedsname oder Konstruktoraufruf nach Typname" und der andere ist "() ist nicht in" ViewController "umwandelbar. Als Referenz ist ViewController eine Klasse, die von NSViewController erbt.

Beide Fehler treten auf ... in der zweiten Zeile des Codes Vielen Dank im Voraus

Antwort

7

in swift Sie sie nicht init auf Klassen rufen instanziiert Sie die init auslassen und setzen nur die Argumente direkt nach der Typenbezeichnung:

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

oder, Sie sollten nicht die nibName zur Verfügung stellen, wenn es die na entspricht ich der Klasse:

let controller = ViewController() 
+2

Und Sie haben NSBundle.mainBundle passieren () als Bündel. Dokumentation sagt nichts ist in Ordnung, aber atm erhalten Sie eine Fehlermeldung, wenn Sie versuchen, Nil als Bündel zu übergeben. – juniperi

+0

danke @juniperi – drewag

+1

@juniperi du hast mir gerade noch viele Stunden frustriert. Ich habe versucht, einen NSViewController zu instantiieren, der nil für das Bündel übergibt, und ich erhielt immer eine "Überlastung für '__conversion', die die gelieferten Argumente akzeptiert" -Fehler. Durch die Übergabe von NSBundle.mainBundle() wird dies behoben. Danke – mike

0

Ich hatte die Initialisierung der View-Controller eine globale Konstante zu machen, um es während meiner App zu arbeiten. Nach meinem Gehirn Abstich, fand ich, dass es vor Ort arbeitete, so macht es global (es außerhalb der AppDelegate Klasse setzen. Arbeitet für mich ohne die „Null“ Fehler)

//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

Auch Bundle: Nil funktioniert auch mit der ViewController Konstante ist global. Apples Dokumente sind nicht falsch. Dies ist sowieso auf 10.9. nil lädt den mainBundle laut den Docs. und lass controller = ViewController() auch damit als global mit gleichem Klassennamen. Ich habe alle drei getestet. – Goodtime