【问题标题】:Swift - NSInvalidArgumentException and NSIndexPathSwift - NSInvalidArgumentException 和 NSIndexPath
【发布时间】:2018-05-27 19:11:08
【问题描述】:

我有一个包含 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 中的下一个单元格。

解决办法是什么???

【问题讨论】:

    标签: swift uitableview uicollectionview cell nsindexpath


    【解决方案1】:

    请添加条件来检查 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)
    
          }
        }
    
    }
    

    【讨论】:

    • 谢谢,但是滚动没有进入单元格它会进入第一个单元格我该怎么做?
    • 哪个滚动,集合视图滚动或表格视图滚动?
    • CollectionView 滚动
    • 你想滚动到哪里......你想滚动到哪个索引?
    • 例如,当我完成第 15 个单元格时,滚动到下一个单元格而不是第一个单元格
    猜你喜欢
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多