Swift - NSInvalidArgumentException 和 NSIndexPath

Posted

技术标签:

【中文标题】Swift - NSInvalidArgumentException 和 NSIndexPath【英文标题】:Swift - NSInvalidArgumentException and 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 中的下一个单元格。

解决办法是什么???

【问题讨论】:

【参考方案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 个单元格时,滚动到下一个单元格而不是第一个单元格

以上是关于Swift - NSInvalidArgumentException 和 NSIndexPath的主要内容,如果未能解决你的问题,请参考以下文章

Swift 反射

Swift入门系列--Swift官方文档(2.2)--中文翻译--About Swift 关于Swift

swift 示例BS swift.swift

swift swift_bug.swift

ios 整理(一)swift和oc的区别

swift swift_extension5.swift