2016-04-28 93 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部分),然後抓取與選定索引路徑相關的正確行。