swift - fatal error : Index out of range when updating data source of table

标签 swift tableview nstableview

任何人都可以澄清为什么我的代码在尝试向该数组添加项目时抛出索引超出范围吗?网络上的其他答案是基于情境的,并不能很好地理解如何纠正错误。

这是添加到数组的代码 -

@IBAction func refreshData(_ sender: Any) {
        let type = "type"
        let cost = dataAdded.shared.cost
        let details = dataAdded.shared.details
        let count = data?.count

        (data!)[count! + 1] = [
        "type" : type,
        "details" : details,
        "cost" : cost
            ] as! [String : String]
        self.tableView.reloadData()
    }

}

这是生成 TableView 的代码 -

func numberOfRows(in tableView: NSTableView) -> Int {
        return (data?.count)!
    }

    func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
        let item = (data!)[row]
        let cell = tableView.makeView(withIdentifier: (tableColumn!.identifier), owner: self) as? NSTableCellView
        cell?.textField?.stringValue = item[(tableColumn?.identifier.rawValue)!]!
        return cell
    }

数组是这样声明的——

var data: [[String: String]]?

这会是个问题吗?

最佳答案

您需要初始化数组,因为您当前的声明为 nil

var data =  [[String: String]]()

并附加到数组,最好有一个

struct Item {

    let type:String
    let details:String
    let cost:String

}

var data =  [Item]()
data.append(Item(type: type, details: details, cost: cost))

关于swift - fatal error : Index out of range when updating data source of table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53650080/

相关文章:

ios - 自定义 iOS 应用启动画面

json - Rx swift : MVVM Update Struct on View Model and Trigger Table Update on View Controller

objective-c - 如何在 NSTableView 中显示图像?

objective-c - 所有 NSTableView 标题都显示排序顺序箭头?

swift - first自动完成后启动另一个后台进程

swift - 在 swift 中,如何使函数从 Firebase 返回查询快照?

ios - 今天扩展 : syncing data with container app

ios - 内联日期选择器的实现

ios - uitableview 分隔符显示为三角形

macos - 如何将工具栏添加到 NSTableView 的底部?