2017-02-03 75 views
0

使用Swift 3,UITableView的func tableView(_ tableView: UITableView, cellForRowAt indexPath: @autoclosure @escaping IndexPath) -> UITableViewCell被調用。我想跟蹤誰在調用這個函數。據我所知,只有在需要顯示一個單元時纔會調用它。但是,在堆棧跟蹤override internal func tableView(_ tableView: UITableView, numberOfRowsInSection section: @autoclosure @escaping Int) -> Int未被調用,並且沒有堆棧跟蹤。有人可以建議從哪裏開始挖掘?謝謝!cellForRowAtIndexPath被調用,但沒有堆棧跟蹤

見附件截圖 No Stacktrace

+0

爲什麼你不覺得'numberOfSections'(或者你的意思是'numberOfRowsInSection')沒有被調用? – rmaddy

+0

我在'numberOfRowsInSection'中放置了一個斷點,但它從未被稱爲 – chlkdst

+0

您確定它具有正確的簽名嗎?用相關的代碼更新你的問題。 – rmaddy

回答

1

默認情況下,你只能看到一個包含調試符號的堆棧跟蹤。所以你不會在這裏看到很多框架內部的東西。

要查看一切,有一個小按鈕堆棧跟蹤窗口的底部,從右側第三位置,這也將使得方法沒有調試符號:

Enable/Disable full stack trace

(在事實上,它取決於你的Xcode版本;在舊版本中有某種滑塊,它會在堆棧跟蹤中顯示更多或更少的細節)。

+0

我在Debug導航器中勾選了該選項,請參閱更新的堆棧跟蹤。仍然沒有運氣。 numberOfRowInSection甚至沒有在堆棧跟蹤 – chlkdst

+1

當然不是。 'numberOfRows:inSection'將被table view _before_'cellForRow:atIndexPath'調用,所以它肯定不應該在堆棧跟蹤中。 –

+0

是的,我現在明白了,'numberOfRows:inSection'總是出現在堆棧跟蹤中。我的主要問題是我不知道是誰觸發'cellForRow:atIndexPath' – chlkdst

0

作爲@AndreasOetjen提到,這是一個正常的行爲,因爲方法get從UIKit Framework類中調用。這個框架中的調用棧默認是隱藏的,可以通過提到的按鈕來選擇。