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的主要内容,如果未能解决你的问题,请参考以下文章