2016-10-13 21 views
1

我有問題讓NSTableView與Swift 3和XCode 8一起工作。我有一個應用程序,其中包含一個表格和一列,並嘗試從NSMutableArray添加項目。這裏是我的代碼:不能使NSTableView在Swift3中工作

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 View。

+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