NSIndexPath indexPathForItem:inSection:返回无意义的值

时间:2016-04-18 02:21:12

标签: ios objective-c nsindexpath

我的意思是'荒谬'是该项目与我传入的项目完全不同的整数,即使在阅读iOS文档后,我也不知道为什么。

NSIndexPath* iPath = [NSIndexPath indexPathForItem:4 inSection:0];

我在该行之后立即设置断点,我看到了

enter image description here

引擎盖下可能发生什么?我做错了什么吗?我已经尝试过其他的东西,例如转换'4'或传入一个变量,并且总是得到比我传入的索引大得多的东西。这显然导致了问题,因为我需要使用这个NSIndexPath来访问UICollectionView中的特定元素,以防这个调试窗口向我显示一些编码或散列值,我尝试将路径传递给

[self.collectionView cellForItemAtIndexPath:iPath];

并且它返回nil,可能是因为集合视图中不存在iPath的项目。有人可以请帮助我提供一些有关如何为我的第五项创建有效的NSIndexPath的见解吗?

2 个答案:

答案 0 :(得分:0)

Leo的回答是正确答案。我在调试器变量面板中看到的值并没有像我原先想的那样直接与部分和项目相关联。他建议使用

po iPath
调试控制台中的

产生了正确的值,我通过右键单击并输入命令自动打印此信息来调整断点。

当给定此索引时,collectionView返回nil单元格的原因仅仅是因为单元格部分位于屏幕外。如果我在屏幕上完全滚动它,那么返回的值是合法的。

作为旁注,我试图有目的地获取离屏元素的坐标,这样我就可以设置其坐标的动画,所以这个答案并没有直接帮助,但它清除了我的误解。我最终通过存储所需单元格的坐标并使用它来解决我的问题,而不是试图回溯索引路径。

答案 1 :(得分:-3)

您可能想尝试这个

NSIndexPath *indexP = [NSIndexPath indexPathForRow:4 inSection:0] ;