2017-01-09 10 views
0

xibファイルにビューを作成してそのアウトレットをクラスに接続する方法があるのだろうかと思っていたので、そのクラスのインスタンスを複数作成して窓。 私はいくつかの問題を抱えています。私のコードを修正する手助けはできますか?ここでNibからNSViewの複数のインスタンスをロードする

は、私がやったことだ:CustomView.xibとCustomView.swift:

まず、私は2つのファイルを作成しました。 次に、NSImageViewをカスタムビューに追加するためのインターフェイスを設計しました。私はファイルの所有者をクラス名に設定し、NSImageViewのコンセントをクラスに追加しました。

その後、私はペン先からインタフェースをロードするには、次の関数を作成:

func loadView() -> NSView { 
    var top = NSArray() 
    Bundle.main.loadNibNamed("CustomView", owner: self, topLevelObjects: &top) 
    let view = top[0] as! NSView 
    return view 
} 

とインタフェースをロードするためのクラスを設定します。

override init(frame: CGRect) { 
    super.init(frame: frame) 
    let view = loadView() 
    view.frame = bounds 
    addSubview(view) 
} 

required init?(coder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

だから私はの2つの変数を作成する上で行ってきましたそのクラスをウィンドウに配置する:

var x = CustomView(frame: CGRect(x: 0, y: 0, width: 600, height: 105)) 
var y = CustomView(frame: CGRect(x: 0, y: 105, width: 600, height: 105)) 

そして、このコードg私には奇妙なエラーがあります。 1つの変数では初めてのことでしたが、複数の変数を配置すると、NSViewでNSWindow型をキャストできないというメッセージが表示されます。

'NSApplication'(0x7fffb5cf3ef0)の値を 'NSView'(0x7fffb5d04bb0)にキャストできませんでした。

enter image description here

私は時々、最初のトップレベルのオブジェクトが表示され、そして時にはそれが窓だから、このエラーが与えられていると思います。だから私は混乱してきている。

は明らかにエラーがこの行にスローされます。

let view = top[0] as! NSView 

だからここでの問題は何でしょうか。

+0

を取得するためにfilter機能を使用します(ココアタッチコードで応答しないでください)? –

+0

どういう意味ですか?私は、View:File> New> File> Viewを作成しました。 – Cristian

+0

インターフェイスファイルを作成するようにXcodeに指示すると、アプリケーション、ビュー、空、ストーリーボードのオプションが与えられます。アプリケーションタイプはあなたが望むものではないと思います...しかし、あなたが持っているものかもしれません。 –

答えて

1

はあなた.xibファイル、あなたはXIBのスタイルを選んだのを作成したときNSViewインスタンス

func loadView() -> NSView { 
    var topLevelObjects = NSArray() 
    Bundle.main.loadNibNamed("CustomView", owner: self, topLevelObjects: &topLevelObjects) 
    let views = (topLevelObjects as Array).filter { $0 is NSView }   
    return views[0] as! NSView 
} 
関連する問題