将 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 减一的主要内容,如果未能解决你的问题,请参考以下文章
如何将 uitableview 选择与 indexpath 值居中
如何将 indexPath 从 segue 传递到目标视图?
将 indexpath 值传递给 FirstViewController