2016-11-24 12 views
0

現在、特定のサブreditから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は、それが実行された後に割り当てが解除されたばかりのダウンロードブロックのローカル変数です。おそらく、あなたの前提は、tvcdelegateおよび/またはdataSourceに保存するとtvcが生きているということです。しかし、そうではありません、彼らは弱い参照です。

+0

パーフェクト、それでした!ありがとうございました – Matty265

関連する問題