gpt4 book ai didi

swift - NSTableView 委托(delegate)方法不会被调用

转载 作者:行者123 更新时间:2023-11-28 16:02:32 25 4
gpt4 key购买 nike

我目前正在尝试解析来自特定 subreddit 的 reddit 标题,并将它们显示在 NSTableView 中。问题是,numberOfRows 函数被调用并返回正确的整数,但 tableView 委托(delegate)函数从未被调用。

据我所知,代码中的一切都已正确连接。

View Controller :

@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()
}
}

表格 View Controller :

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 方法确实有效,我检查了这些。

最佳答案

我认为您的问题是您的 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 是下载 block 的局部变量,在执行后将被释放。大概您的假设是将 tvc 存储在 delegate 和/或 dataSource 中使 tvc 保持事件状态。但它们不是,它们是弱引用。

关于swift - NSTableView 委托(delegate)方法不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40795545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com