将 indexPath 减一

Posted

技术标签:

【中文标题】将 indexPath 减一【英文标题】:Decrease indexPath by one 【发布时间】:2011-11-22 17:55:09 【问题描述】:

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

【问题讨论】:

你不能把第一行放到它自己的部分吗? @jrturton 在实施 Ariel 的解决方案后,我意识到您的建议更简洁、更合乎逻辑:) thx 【参考方案1】:

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

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

干杯... :)

【讨论】:

我必须使用 row-1 来获取前一行 indexPath,这就是我阅读问题的方式。但是无论如何 +1 因为这基本上是我所需要的。【参考方案2】:

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

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

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

这基本上做了以下事情:

    将现有索引拉入 NSUIntegers 的 C 数组中 将最后一个索引(位置 1 - 行索引)减 1 使用 C 数组中调整后的索引创建一个新的 NSIndexPath 使用新的索引路径获取托管对象

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

【讨论】:

如果我们在谈论 UITableView 索引路径,有更简单的方法: NSIndexPath* newIndexPath = [NSIndexPath indexPathForRow:oldIndexPath.row+1 inSection:oldIndexPath.section];干杯... :) @Ariel:...对。绝对是在看 Mac 类参考而不是 iOS。做得好,如果您想将其作为单独的答案发布,我会推荐它而不是我的 :) 我从问题中发布了它,认为无法知道 macOS 或 iOS 是否需要答案。让两个答案都用于通用目的:) 如你所想,我的 TableView 中只有一个部分。我正在尝试实现@Ariel 答案(正如蒂姆所建议的那样),但发生了一些奇怪的事情。当我第一次可视化表格时,内容最终是正确的,这意味着从第二行开始,单元格的内容就是我在调整后所期望的。但是当我向下滚动表格时,应用程序崩溃 [[UITableViewCell categoryNameLabel]: unrecognized selector sent to instance 0x8146560]。 @Ariel 是 iOS,很抱歉造成混淆,我认为标签 iPhone 已经足够清晰了 :(

以上是关于将 indexPath 减一的主要内容,如果未能解决你的问题,请参考以下文章

将 indexPath 暴露给 configureCell

如何将 uitableview 选择与 indexpath 值居中

如何将 indexPath 从 segue 传递到目标视图?

将 indexpath 值传递给 FirstViewController

将indexpath标签传递给tableview原型单元格内的按钮

TableView 中的 indexPath 比较