gpt4 book ai didi

macos - 带有标识符的 NSTableView 单元格始终给出 nil

转载 作者:行者123 更新时间:2023-12-03 16:16:17 28 4
gpt4 key购买 nike

我正在致力于构建 MacOS 应用程序。我正在尝试制作表格 View ,当我按下添加按钮时更新单元格。

enter image description here

以下是我的代码:

 func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
let identifier = tableColumn?.identifier as NSString?
if ( identifier == "NameCell")
{
var result: NSTableCellView
let cell = tableView.make(withIdentifier: "NameCell", owner: self) as! NSTableCellView
cell.textField?.stringValue = self.data[row].setting!
return cell

}
else if (identifier == "SettingCell")
{
if let cell = tableView.make(withIdentifier: "SettingCell", owner: self) as? NSTableCellView {
cell.textField?.stringValue = self.data[row].setting!
return cell
}
}
return nil
}

但是,行 let cell = tableView.make(withIdentifier: "NameCell",owner: self) as! NSTableCellView 一直失败,因为它返回 nil

fatal error :在解包可选值时意外发现 nil

NameCell 来自 enter image description here谁能帮我找到解决这个问题的方法吗?

最佳答案

对于在尝试完全以编程方式制作 NSTableView 时遇到同样问题的任何其他人: makeView(withIdentifier:owner:)除非给定标识符存在相应的 NIB,否则将返回 nil:

NSTableView documentation:

If a view with the specified identifier can’t be instantiated from the nib file or found in the reuse queue, this method returns nil.

同样,“owner”参数是 NIB 特定的概念。简而言之:如果以编程方式使用单元格填充 NSTableView,则无法使用此方法。

在这个答案中,我详细介绍了以编程方式生成 NSTableCellView 的 Swift 代码: https://stackoverflow.com/a/51736468/5951226

但是,如果您不想要 NSTableViewCell 的所有功能,请注意,您可以在 tableView(_:viewFor:row:) 中返回任何 NSView 。所以你可以按照CocoaProgrammaticHowtoCollection ,只需写:

let cell = NSTextField()
cell.identifier = "my_id" // Essential! Allows re-use of the instance.
// ... Set any properties you want on the NSTextField.
return cell

关于macos - 带有标识符的 NSTableView 单元格始终给出 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44496514/

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