2016-08-11 9 views
1

私はストーリーボードでOS Xアプリを開発しています。カスタムViewControllerを持つ匿名ウィンドウ上のエントリポイントを持つPreview.storyboardを取得します。 AppDelegateクラスでは、次の関数を取得します。別のストーリーボードで新しいウィンドウを開く

func newPreviewWindow(sender: AnyObject) { 
    let storyboard = NSStoryboard.init(name: "Preview", bundle: nil) 
    let initialController = storyboard.instantiateInitialController() 
    initialController!.showWindow(nil) 
    initialController!.makeKeyAndOrderFront(nil) 
} 

、窓のショーをコードを実行しているが、私は次の例外を取得する場合:例外メッセージに基づいて

2016-08-11 10:27:12.434 MyApp[1090:290439] -[NSWindowController makeKeyAndOrderFront:]: unrecognized selector sent to instance 0x60000008c350 
2016-08-11 10:27:12.434 MyApp[1090:290439] -[NSWindowController makeKeyAndOrderFront:]: unrecognized selector sent to instance 0x60000008c350 
2016-08-11 10:27:12.440 MyApp[1090:290439] (
    0 CoreFoundation    0x00007fff926284f2 __exceptionPreprocess + 178 
    1 libobjc.A.dylib   0x00007fff97c0ef7e objc_exception_throw + 48 
    2 CoreFoundation    0x00007fff926921ad -[NSObject(NSObject) doesNotRecognizeSelector:] + 205 
    3 CoreFoundation    0x00007fff92598571 ___forwarding___ + 1009 
    4 CoreFoundation    0x00007fff925980f8 _CF_forwarding_prep_0 + 120 
    5 MyApp      0x0000000100005617 
... 

をし、GoogleとStackOverflowの上で検索し、私はmakeKeyAndOrderFrontにセレクタを送信しようとしました

func newPreviewWindow(sender: AnyObject) { 
    let storyboard = NSStoryboard.init(name: "Preview", bundle: nil) 
    let initialController = storyboard.instantiateInitialController() 
    let selector = #selector(AppDelegate.newPreviewWindow(_:)) 
    initialController!.showWindow(nil) 
    initialController!.makeKeyAndOrderFront(selector) // [A] 
} 

しかし、その後、私はライン上で以下のコンパイルエラーを取得[A]:このように機能Cannot call value of non-function type '((AnyObject?) -> Void)!'

新しいウィンドウを開く、またはセレクタを渡す適切な方法は?

ありがとうございます!それはNSWindow(したがって認識されないセレクター誤差)に属する - makeKeyAndOrderFront:NSWindowController方法ないので:)

答えて

1

initialController!.makeKeyAndOrderFront(nil)が問題を引き起こしています。その後、コントローラのwindowプロパティを介してフロントにウィンドウを持って、あなたのNSWindowControllerサブクラスにあなたの最初のコントローラをキャスト:

var windowController: NSWindowController! 

@IBAction func showOtherWindow(sender: AnyObject) { 
    windowController = storyboard.instantiateInitialController() as! NSWindowController 
    windowController.window?.makeKeyAndOrderFront(nil) 
} 
+0

どうもありがとう!それは例外とコンパイルの両方のエラーを修正するようです。残念ながら、ウィンドウは全く表示されません(例外は 'initialController!.makeKeyAndOrderFront(nil)'にスローされたときにどのように表示されていたか不思議です)。私は 'windowController.showWindow(nil)'と 'windowController.window!.makeKeyAndOrderFront(nil)'の両方を行い、何も起こりません。どうしてアイデアが出てくるのですか? –

+2

あなたが投稿したコードでは '' initialController''はローカル変数です。他のローカル変数と同様に、それを作成した関数が終了するとすぐに(ウィンドウとともに)失われます。言い換えれば、ウィンドウ**は**表示されますが、関数が実行されるまでは表示されません。これはとても素早く起こり、何も起こらないように見えます。クラッシュするコードでは、クラッシュにはおそらく関数の実行が一時停止またはフリーズされるという影響があります。その結果、関数は決して戻りません。そして、ウィンドウコントローラーは、ウィンドウを画面上に保持するために残っています。解決策は、コントローラをプロパティに割り当てることです。 –

+0

ありがとうございます!それは今、完璧に動作し、私はまだ私のJavaの背景のために理解していない2つの重要な概念を把握してきました!どうもありがとう!! –

関連する問題