与NSindexpathforselectedrow混淆

时间:2016-04-28 21:31:52

标签: arrays swift uitableview logic nsindexpath

长话短说,我正在重新审视一个旧项目,并且只是享受有关indexPathForSelectedRow的解释!

基本上,我有初始表视图显示值1,2或3,类似于此数组。

var array1 = ["1", "2", "3"]

一旦用户选择1,2或3,它们将被segued到第二个表视图,显示相应嵌套数组的值。

var array 2 = [["11", "12"], ["25", "27"], ["36", "39"]]

例如,如果用户在第一个表视图中选择了2,则会将它们带到包含值25和27的第二个表中。

这是使用此代码

完成的
if let destViewController = segue.destinationViewController as? RestaurantNameTable {
let indexPath = self.tableView.indexPathForSelectedRow!
destViewController.selectedRestaurants = array2[indexPath.section]

这是我的困惑。

我知道indexPathForSelectedRow引用了一个节和一行。

但是,在选择第一个数组时,没有部分,只有3行。那么为什么使用数组1的nsindexpathforselectedrow(也就是3行)仍然引用array2中正确的section / array?特别是如果我指的是array2的部分?

换句话说,如果我在array1中选择任何一行,我就没有任何部分....当所有indexpath只是一行#时,我怎么能说array2部分= = indexpath?

除非我的理解存在缺陷,否则在array1中选择“2”的部分为0且行为1,但是array2的内容为“25”和& “27”有一节1?这个逻辑是如何工作的?

如果您想要对此问题进行新的措辞,请询问。我自己很难过,哈哈。

无论如何,感谢您寻求帮助!

1 个答案:

答案 0 :(得分:0)

部分编号不反映部分的数量,它只是分配给它的ID。因此对于array1,该部分为0,因为第一部分总是被赋值为0,除非您另外设置它。与数组类似,以及数组的第一个索引如何为0,第一部分为0.

所以我相信你面对的是array1的问题,那就是它是一个单维数组。意思是,对于像array1这样的一维数组,当你使用“indexPathForSelectedRow”时,它在主数组中寻找第0个数组(第0节),然后它试图从该内部数组中检索该行。因此,它根本没有找到数组,因为没有(因为它是单个维度)。所以,如果你这样做(将原始数组放在另一个数组中):

let array1 = [["1", "2", "3"]]

然后做了这个:

if let destViewController = segue.destinationViewController as? RestaurantNameTable {
let indexPath = self.tableView.indexPathForSelectedRow!
destViewController.selectedRestaurants = array2[indexPath.section]

然后它将与array2完全相同。因为它抓取第0个数组(第0部分),然后抓取绑定到所选索引路径的正确行。