SWIFT:为 tableView 计算 numberOfRowsInSection 时,数组索引超出范围

Posted

技术标签:

【中文标题】SWIFT:为 tableView 计算 numberOfRowsInSection 时,数组索引超出范围【英文标题】:SWIFT: Array index out of range' when calculating numberOfRowsInSection for tableView 【发布时间】:2015-08-08 14:57:28 【问题描述】:

我正在尝试根据在前一个屏幕上选择的特定类别类型(例如卧室装饰、厨房用品、客厅家具等)计算 numberOfRowsInSection。我已经使用前一个屏幕中的 prepareForSegue 传递了一个索引,并使用以下内容来选择类别类型:

let category = categoryData[index!]
let categoryType = category.category

然后,我将该类别类型与供应商数据结构交叉引用,以在 tableView 中显示该特定类别的所有供应商。下面是判断numberOfRowsInSection的函数:

//pulls the data from the Category and Vendor data structures which both contain a "category" item
let categoryData = Data().headerData        
let vendorData = Data().vendorData

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    // #warning Incomplete implementation, return the number of rows

    let category = categoryData[index!]
    let categoryType = category.category

    var count: Int = 0

    for (var i=1; i <= vendorData.count; i++) 

        if vendorData[i].category == categoryType 

            count = count + 1
        
    

    return count

它成功运行,但是一旦它进入供应商列表屏幕,它就会崩溃并且控制台显示“数组索引超出范围”。我在 Playground 中对此进行了测试,它似乎工作正常。

对于完整的上下文,一旦确定了正确的行数,我运行以下命令来填充每个单元格:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCellWithIdentifier("vendorCell", forIndexPath: indexPath) as! VendorSelectionTableViewCell

    let category = categoryData[index!]
    let categoryType = category.category

    let vendorEntry = vendorData[indexPath.row]

    if vendorEntry.category == categoryType 

        cell.vendorName.text = vendorEntry.name

     else 
         cell.vendorName.text = "No Value"

    

    return cell

【问题讨论】:

【参考方案1】:

Swift 数组从 0 开始计数,而不是从 1 开始计数。如果您将代码更改为

for (var i=0; i < vendorData.count; i++) 
    if vendorData[i].category == categoryType 
        count = count + 1
    

你应该没事的。不过,我不确定为什么它在操场上有效。也许你的vendorData 是空的。

【讨论】:

谢谢!这很有帮助!

以上是关于SWIFT:为 tableView 计算 numberOfRowsInSection 时,数组索引超出范围的主要内容,如果未能解决你的问题,请参考以下文章

(SWIFT 4)如何计算 tableview 中列 indexpath.row 的总和?

Swift:动态填充 TableView 中的部分数量和 numberOfRowsInSection

Swift Json 转换为 tableview 的数组

将数据解析为tableview swift 3

如何在 swift 中仅为唯一值更新 TableView 行?

在 Swift 中为嵌入式 tableView 中的 segue 做准备