我正在用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。谁能帮我? 感谢你的时间!
答案 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];
这基本上可以做到以下几点:
再次注意,这根本不会触及部分索引,因此会调整表中的每个单元格,无论它是否在第一部分中。如果这不是您想要的,请将调整包装在条件(例如if([indexPath indexAtPosition:0] == 0)
)中或添加您自己的自定义逻辑。