我最近一直在玩OSX编程(通常是一个iOS人),但我遇到了一个奇怪的问题,NSCollectionView我似乎无法调试。
当我更改数据源用于使用项目填充集合的数据时,我像往常一样在集合视图上调用reloadData()
,有时会遇到断言。我得到的错误是Parameter indexPath out of bounds or nil
。如果我不改变数据,应用程序总是在同一点崩溃,虽然有时候,通常是第一次,它工作正常,只会随后崩溃。
现在,我已经多次调试了这个问题。数据是正确的,在我的代码中,我从未看到过nil索引路径。断言始终发生在makeItemWithIdentifier
调用上,并始终位于集合中的最后一项。如果我继续,我要么看到我的期望,要么上一个集合中的一些细胞仍然在新细胞后面。
有一次,我稍微重构了代码,发现错误发生在NSCollectionView
s itemAtIndexPath:
函数中。
有没有其他人看过这个错误,如果有,是什么造成的?
更新2:我现在知道导致此问题的原因,但不知道如何阻止它。会发生什么:用户单击集合视图中的项目。该项在集合视图委托reloadData
方法期间更改数据源正在从调用didSelectItemsAtIndexPaths
读取的数据对象。出于某种原因,在执行此方法之后,将再次查询具有该索引路径的单元的集合视图。如果在此期间已重新加载该表,则该单元格将消失,从而导致异常。简而言之:您无法呼叫重新加载'在一个集合视图上,当一个鼠标事件正在其中一个单元格上处理而没有得到恼人的断言。所以,如果有人能想出解决这个问题的方法,我很乐意听到它!