2016-10-13 8 views
1

NSTableViewをSwift 3とXCode 8で動作させるのに問題があります。私は1つのテーブルと1つの列を持つアプリケーションをNSMutableArrayから追加しようとしています。ここに私のコードは次のとおりです。Swift3でNSTableViewを動作させることができません

import Cocoa 

class ViewController: NSViewController { 

    @IBOutlet weak var tableView: NSTableView! 
    var objects: NSMutableArray! = NSMutableArray() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.objects.add("one") 
     self.objects.add("two") 
     self.objects.add("three") 
     self.objects.add("four") 

     self.tableView.reloadData() 
    } 

    func numberOfRowsInTableView(tableView: NSTableView) -> Int 
    { 
     return self.objects.count 
    } 

    func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? 
    { 
     let cellView = tableView.make(withIdentifier: "cell", owner: self) as! NSTableCellView 

     cellView.textField!.stringValue = self.objects.object(at: row) as! String 

     return cellView 
    } 

    override var representedObject: Any? { 
     didSet { 
     // Update the view, if already loaded. 
     } 
    } 


} 

しかしこれは私にエラーを与える:

*** Illegal NSTableView data source (<NSView: 0x610000120820>). Must implement numberOfRowsInTableView: and tableView:objectValueForTableColumn:row 

boths方法は、私は、なぜ私はこのエラーを取得していないアイデアを持っていないので、実装されているように見えます。 テーブルビューのdataSourceとデリゲートは、どちらもmanビューに設定されています。

+2

自分でデリゲートとしてテーブルデータソースを設定しましたか? – pbush25

答えて

0

pbush25が推奨するように、コード内にデリゲートとデータソースを設定する必要がありました。また、私はTableViewモードを「セルベース」に切り替えました。最終的なコードは次のようになります:

import Cocoa 

class ViewController: NSViewController, NSTableViewDelegate, NSTableViewDataSource { 

    @IBOutlet weak var tableView: NSTableView! 
    var objects: NSMutableArray! = NSMutableArray() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.objects.add("one") 
     self.objects.add("two") 
     self.objects.add("three") 
     self.objects.add("four") 

     tableView.delegate = self 
     tableView.dataSource = self 
    } 

    func numberOfRows(in tableView: NSTableView) -> Int 
    { 
     return self.objects.count 
    } 

    func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? 
    { 
     return self.objects.object(at: row) 
    } 

    override var representedObject: Any? { 
     didSet { 
     } 
    } 
} 
2

numberOfRowsメソッドのシグネチャは、現在のmacOS SDKでは正しくありません。それはでなければなりません:
func numberOfRows(in tableView: NSTableView) -> Int

関連する問題