2016-04-28 88 views
1

长话短说,我正在重新访问一个旧的项目,只会享受有关indexPathForSelectedRow的解释!与NSindexpathforselectedrow的混淆

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

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

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

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中的正确部分/数组?尤其是如果我指的是array2的部分?

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

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

如果您想要了解此问题的新表述,请询问。我自己很难过,哈哈。

无论如何,感谢您的期待和任何帮助!

回答

0

部分编号不反映部分的数量,它只是一个分配给它的编号。因此对于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] 

那么这将工作完全一样数组2。因为它抓取第0个数组(第0部分),然后抓取与选定索引路径相关的正确行。