9

我正在用 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。谁能帮我?谢谢你的时间!

4

2 回答 2

13

如果我们在谈论 iOSUITableView索引路径,有更简单的方法:

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

干杯... :)

于 2011-11-22T19:44:58.983 回答
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. 将现有索引拉入 NSUInteger 的 C 数组
  2. 将最后一个索引(位置 1 - 行索引)减 1
  3. 使用 C 数组中调整后的索引创建一个新的 NSIndexPath
  4. 使用新的索引路径获取托管对象

再次注意,这根本不会触及部分索引,因此将调整表格中的每个单元格,无论它是否在您的第一部分中。如果这不是您想要的,请将调整包装在条件中(例如if([indexPath indexAtPosition:0] == 0))或添加您自己的自定义逻辑。

于 2011-11-22T19:13:27.230 回答