2016-11-24 224 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

相关问题