索引超出了searchBar范围

时间:2017-06-18 21:32:04

标签: ios arrays swift uicollectionview

我正在学习如何启动并运行searchBar。

教程: https://www.raywenderlich.com/113772/uisearchcontroller-tutorial

我完全遵循所写的每一步,但当我在手机上运行应用程序时,按下搜索栏开始搜索我遇到的错误,称为“致命错误:索引超出范围”。这是导致错误的整个代码的代码

   func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

    if searchController.isActive && searchController.searchBar.text != "" {
        return users.count
    }else{
        return self.locations.count 
    }
}

当我设置断点以查看此错误的原因时,它会显示到达

return self.locations.count

发生错误时。如果有帮助,我可以发布更多代码

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! PostCell
    cell.backgroundColor = UIColor.clear
    let postInformation = users[indexPath.row]
    cell.userNameTextField.text = postInformation.user
    cell.userDescription.text = postInformation.text

    cell.postImage.loadImageUsingCachWithUrlString(urlString: postInformation.image!)
    cell.cellLocationX = cell.postImage.frame.origin.x   //cell.frame.origin.x
    cell.cellLocationY = cell.postImage.frame.origin.y   //cell.frame.origin.y
    return cell
}

var users = [MapPoints]()
var locations = [MapPoints]()

1 个答案:

答案 0 :(得分:1)

您的collectionView(_:cellForItemAt:)始终从users数组返回项目。如果locations的元素多于users,则会尝试访问users数组中的无效索引。

collectionView(_:cellForItemAt:)collectionView(_:numberOfItemsInSection:)必须从同一个数组中读取以填充您的集合视图。

查看您提到的教程中的相应tableView(_:cellForRowAtIndexPath:)