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

时间:2015-08-08 14:57:28

标签: ios swift uitableview tableview

我正在尝试根据在前一个屏幕上选择的特定类别类型(例如,卧室装饰,厨房用品,客厅家具等)计算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
}

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

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

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 个答案:

答案 0 :(得分:0)

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

for (var i=0; i < vendorData.count; i++) {
    if vendorData[i].category == categoryType {
        count = count + 1
    }
}
你应该没事的。不过,我不确定为什么它在操场上有用。也许你的vendorData是空的。