2014-06-16 26 views
5

我目前的如何在Swift中實例化NSViewController?

  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 

斯威夫特代碼越來越兩個錯誤。一個是「預期的成員名稱或類型名稱後的構造函數調用」,另一個是「()不能轉換爲'ViewController'。作爲參考,ViewController是繼承自NSViewController的類。

這兩個錯誤都發生。在

回答

7

在SWIFT代碼預先感謝第二行,你不叫init的類來實例化它們你離開了初始化,只是把參數的類型名稱之後:

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

或者,你應該不需要提供nibName如果它匹配na我的類:

let controller = ViewController() 
+2

你必須通過NSBundle.mainBundle( )作爲捆綁。文檔說nil是好的,但是如果你試圖通過nil作爲bundle,你會得到錯誤信息。 – juniperi

+0

謝謝@ juniperi – drewag

+1

@ juniperi你剛剛救了我多少小時的挫折。我試圖實例化一個NSViewController傳遞nil的包,我一直得到一個「無法找到'__conversion'接受提供的參數」錯誤的重載。傳遞NSBundle.mainBundle()修復了這個問題。謝謝 – mike

0

我不得不做出視圖控制器一個全局變量的初始化,以便它在整個我的應用程序工作。貨架我的大腦之後,我發現它在本地工作,所以使得全球(把它的AppDelegate類之外。對我的作品沒有「零」誤差)

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

也捆綁:無效也與viewController常量是全球性的。 Apple的文檔沒有錯誤。無論如何,這是10.9。根據文檔,nil加載mainBundle。並讓controller = ViewController()也作爲具有相同類名的全局使用。我測試了所有三個。 – Goodtime