当iOS 7.1发送我的viewController时:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
cellForItemAtIndexPath:(NSIndexPath *)indexPath
indexPath对象无法识别属性:item,section或row。期望值是section = 0,item = 0
调试器显示:
**indexPath NSIndexPath * 0xc000000000000016
NSObject
_indexes NSUInteger * NULL
*_indexes
_length
_reserved void * NULL
日志报告:
(lldb) po indexPath
<NSIndexPath: 0xc000000000000016> {length = 2, path = 0 - 0}
(lldb) po indexPath.item
error: property 'item' not found on object of type 'NSIndexPath *'
error: 1 errors parsing expression
(lldb) po indexPath.row
error: property 'row' not found on object of type 'NSIndexPath *'
error: 1 errors parsing expression
(lldb) po indexPath.section
error: property 'section' not found on object of type 'NSIndexPath *'
error: 1 errors parsing expression****
任何想法为什么会发生这种情况以及如何处理它?</ p>
答案 0 :(得分:30)
请勿使用getter / setter点语法,使用括号:
po (int)[index row]
po (int)[index section]
请注意,(int)
是将行/节打印为整数而不是十六进制所必需的。可以找到LLDB的其他此类有用格式参数here。
Swift覆盖到Foundation框架提供了IndexPath结构,该结构桥接到NSIndexPath类。 IndexPath值类型提供与NSIndexPath引用类型相同的功能,并且这两者可以在与Objective-C API交互的Swift代码中互换使用。此行为类似于Swift如何将标准字符串,数字和集合类型桥接到相应的Foundation类。
po index.row
po index.section
按预期工作。 p
与po
的评论仍然有效。
值得注意的是,您可以在 Swift 中使用IndexPath
,而不是 NSIndexPath ,如Apple Documentation中所述。
答案 1 :(得分:11)
你可以试试这个,它对我来说很完美:
po (int)[indexPath row]
答案 2 :(得分:3)
你为什么用po? NSIndexPath的结果行和部分是整数,而不是对象。
使用p代替po。
p [indexPath section]
p [indexPath row]
p indexPath.section
p indexPath.row
我总是犯同样的错误。
注意:如果使用UIViewController并将其扩展为具有UITableViewController委托和数据源,请确保将UITableView.h导入到头文件中。
此文件添加了对NSIndexPath的扩展,以便您可以使用行和节。如果您没有导入声明它们的文件,您会发疯地想知道为什么indexpath.row
和indexpath.section
无法正常工作。