2016-11-24 159 views
0

我目前正試圖解析從一個特定的subreddit的reddit標題,並顯示這些在NSTableView。事情是,調用numberOfRows函數並返回正確的整數,但tableView委託函數永遠不會被調用。NSTableView委託方法不會被調用

據我所見,在代碼中正確連接了所有東西。

的ViewController:

@IBOutlet weak var tableView: NSTableView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view. 
    Downloader.load(url: URL(string: "https://www.reddit.com/r/" + "gaming" + ".json")!){ 
     (result) in 
     let tvc = TableViewController(data: result) 

     self.tableView.delegate = tvc 
     self.tableView.dataSource = tvc 
     self.tableView.reloadData() 
    } 
} 

TableViewController:

class TableViewController: NSObject{ 

    var json: JSON! 

    init(data: JSON) { 
     super.init() 
     self.json = data 
    } 
} 
extension TableViewController : NSTableViewDataSource { 
    func numberOfRows(in tableView: NSTableView) -> Int { 
     return JSONFormatController.getTitlesFrom(json: json).count 
    } 
} 
extension TableViewController : NSTableViewDelegate { 
    func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? { 
     var titles = JSONFormatController.getTitlesFrom(json: json) 
     if let cell = tableView.make(withIdentifier: "entry", owner: nil) as? NSTableCellView { 
      cell.textField?.stringValue = titles[row] 
      return cell 
     } else { 
      return nil 
     } 
    } 
} 

result變量和方法getTitlesFrom做的工作,我檢查了這些。

回答

0

我認爲你的問題是你的TableViewController對象被取消分配,因爲你沒有保留對它的引用。試試這個:

@IBOutlet weak var tableView: NSTableView! 
var tvc : TableViewController! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view. 
    Downloader.load(url: URL(string: "https://www.reddit.com/r/" + "gaming" + ".json")!){ 
     (result) in 
     self.tvc = TableViewController(data: result) 

     self.tableView.delegate = self.tvc 
     self.tableView.dataSource = self.tvc 
     self.tableView.reloadData() 
    } 
} 

說明:tvc是它已被執行之後這是越來越釋放下載塊的局部變量。假設您的假設是將tvc保存在delegate和/或dataSource保持tvc存活。但他們不是,他們是弱引用。

+0

完美無瑕!謝謝 – Matty265

相關問題