将indexPath减1

时间:2011-11-22 17:55:10

标签: iphone uitableview nsindexpath

我正在用CoreData填充TableView。

到目前为止,我正在做这样的事情:

        NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath:indexPath];

...检索要填充行的对象。

一切正常,直到我意识到必须将表的第一行作为例外进行管理,因为第一行将包含其他内容,而不是CoreData提供的。

现在我的问题是我如何操纵indexPath将所有内容都移动一个。我想做这样的事情:

// I know this is not going to work, just to give you an idea...
   NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath:indexPath-1];

但我找不到合适的语法来操纵indexPath。谁能帮我? 感谢你的时间!

2 个答案:

答案 0 :(得分:12)

如果我们谈论的是iOS UITableView索引路径,那么就有更简单的方法:

NSIndexPath* newIndexPath = [NSIndexPath indexPathForRow:oldIndexPath.row+1 inSection:oldIndexPath.section];

干杯...... :)

答案 1 :(得分:2)

如果您正在谈论标准的iOS UITableView,那么您的索引路径是NSIndexPath的一个实例,并且将有两个条目:部分索引和指数。如果我理解正确,那么每次填充表格视图单元格时,都希望将索引减1。 (我假设你只有一个部分,或者不关心部分索引 - 如果这是错误的,请编辑你的问题。)

基本上你需要做的是用你的调整后的索引构造一个新的NSIndexPath实例,然后使用它来查询你提取的结果控制器。这样的东西可以工作(未经测试):

NSUInteger indexes[2];
[indexPath getIndexes:indexes];
indexes[1]--;
NSIndexPath * adjustedIndexPath = [[NSIndexPath alloc] initWithIndexes:indexes
                                                                length:2];
NSManagedObject * managedObject = [self.fetchedResultsController
                                    objectAtIndexPath:adjustedIndexPath];

这基本上可以做到以下几点:

  1. 将现有索引拉入NSUIntegers的C数组
  2. 将最后一个索引(位置1 - 行索引)减少1
  3. 使用来自C数组的调整后的索引创建新的NSIndexPath
  4. 使用新的索引路径获取托管对象
  5. 再次注意,这根本不会触及部分索引,因此会调整表中的每个单元格,无论它是否在第一部分中。如果这不是您想要的,请将调整包装在条件(例如if([indexPath indexAtPosition:0] == 0))中或添加您自己的自定义逻辑。