Swift - NSInvalidArgumentException和NSIndexPath

时间:2018-05-27 19:11:09

标签: swift uitableview uicollectionview cell nsindexpath

我有14个单元格的TableView,并且每个单元格中有一个包含25个单元格的CollectionView,当从第24个单元格转移到单元格25时显示崩溃!

  

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'尝试滚动到无效的索引路径:{length = 2,path = 0 - 25}'

代码:

var EnabledID = Int()

override func viewWillAppear(_ animated: Bool) {

    EnabledID = UserDefaults.standard.integer(forKey: "EnabledID")

    if EnabledID == 0 {

        EnabledID = 1
        UserDefaults.standard.set(1, forKey: "EnabledID")

    } else {

        let index = NSIndexPath(item: EnabledID, section: 0)
        self.myCollectionView.scrollToItem(at: index as IndexPath, at: .centeredHorizontally, animated: true)

    }

}

上面的代码我希望在完成任何单元格之后,滚动会自动转到CollectionView中的下一个单元格。

解决方法是什么?

1 个答案:

答案 0 :(得分:2)

请添加条件以检查indexPath是否存在(因为索引从0开始,因此您的索引如0-24和索引路径25将不存在所以请在重新加载之前添加一个检查):

override func viewWillAppear(_ animated: Bool) {

    EnabledID = UserDefaults.standard.integer(forKey: "EnabledID")

    if EnabledID == 0 {

        EnabledID = 1
        UserDefaults.standard.set(1, forKey: "EnabledID")

    } else {

       let totelCells = myCollectionView.numberOfItems(inSection: 0)
       if totelCells > EnabledID {
        let index = NSIndexPath(item: EnabledID, section: 0)
        self.myCollectionView.scrollToItem(at: index as IndexPath, at: .centeredHorizontally, animated: true)

      }
    }

}