swift - 为什么 NSTableView 不重新加载?

标签 swift macos cocoa nstableview

我对使用 Swift 进行编程仍然很陌生(从来没有使用过 Objective C)。我想要做的是在我单击当前 TableView 中的项目时添加到 NSTableView。单击时似乎会添加这些项目,但表格似乎不会用数组中的新事物进行刷新。

在过去的几天里,我尝试了各种方法,让它在主线程和 UI 线程上运行 reloadData 等,但我觉得我只是撞墙了(肯定不会这么难做一些如此简单的事情,就像我在几分钟内用 Java 就能做到的那样)...

我是不是漏掉了一些非常明显的东西? (下面的代码)

class TableViewController: NSTableView, NSTableViewDataSource, NSTableViewDelegate {

var items: [String] = ["Eggs", "Milk"]


func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView? {

    let result : TableCell = tableView.makeViewWithIdentifier(tableColumn!.identifier, owner: self) as! TableCell

    result.itemField.stringValue = items[row]

    return result

}


func numberOfRowsInTableView(tableView: NSTableView) -> Int {
    return items.count
}

func tableViewSelectionDidChange(notification: NSNotification) {
    let index = notification.object!.selectedRow

    if (index != -1) {
        NSLog("@%d", index)
        items.append("Blah")
        NSLog("@%d", items.count)

        dispatch_async(dispatch_get_main_queue(), { () -> Void in
            self.reloadData()
        })

    }
}

func relloadData() {     //relload is not a typo
    self.reloadData()
}
}

最佳答案

如果您将用户界面绑定(bind)到 View Controller 子类的 items 属性,则需要将其标记为动态变量:

dynamic var items: [String] = ["Eggs", "Milk"]

dynamic 关键字放在属性声明之前,我认为它会解决您的问题。

请注意,Ken 的评论也提出了一个很好的观点,即这段代码可能应该编写为 NSViewController 子类,而不是 NSTableView 的子类。

如果您正在使用 Storyboard,自定义 View Controller 子类将是包含您的 TableView 的 View 的 View Controller 对象。如果您为 View 使用 xib 文件,则 View Controller 子类将是文件的所有者。在任何一种情况下,您都可以将 TableView 的委托(delegate)和数据源导出连接到该对象。

关于swift - 为什么 NSTableView 不重新加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34371324/

相关文章:

ios - 表格 View 单元格未在模拟器中显示

swift - 在 OSX 上录制音频(AVAudioSession 不可用)

objective-c - 如何在cocoa中选择文件

python - Cocoa:制作与 python 子例程相结合的应用程序有多安全?

macos - Mac - 如何以编程方式隐藏 NSApplicationActivationPolicyAccessory 或 LSUIElement 应用程序?

ios - iOS 中的 XIB 状态栏不可见 - 为什么?

swift - 第一次使用按钮代码

swift - 无法通过 PDFKit 在 iOS 13 和 iPhones 11、XR 等上绘制图像注释

xcode - 我如何在OSX Lion上为Xcode安装其他软件包以允许MacPorts工作

ios - 是否有可能在 cocoa 上获得唯一的 iCloud 用户 ID?