NSIndexPath不会将项目,部分或行识别为属性

时间:2014-07-08 01:55:56

标签: ios uicollectionview uicollectionviewcell nsindexpath

当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>

3 个答案:

答案 0 :(得分:30)

请勿使用getter / setter点语法,使用括号

  1. po (int)[index row]
  2. po (int)[index section]
  3. 请注意,(int)是将行/节打印为整数而不是十六进制所必需的。可以找到LLDB的其他此类有用格式参数here

    修改

      

    Swift覆盖到Foundation框架提供了IndexPath结构,该结构桥接到NSIndexPath类。 IndexPath值类型提供与NSIndexPath引用类型相同的功能,并且这两者可以在与Objective-C API交互的Swift代码中互换使用。此行为类似于Swift如何将标准字符串,数字和集合类型桥接到相应的Foundation类。

    1. po index.row
    2. po index.section
    3. 按预期工作。 ppo的评论仍然有效。

      值得注意的是,您可以在 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.rowindexpath.section无法正常工作。