2013-11-15 24 views
0

我想顯示一個非常長的列表元素,大約分爲580個部分。當我打開UITableViewController時,需要一兩秒鐘(在iPhone 5上)來加載控制器。通過檢測代碼,我瞭解到這是我爲每個部分的標題所做的字符串操作,這會延遲表的顯示。如果返回一個常量字符串,它會更快地執行。UITableViewDataSource:titleForHeaderInSection調用不可見部分

  • 問題1:爲什麼UITableView會提前構造所有節標題,而另一方面,它會通過渲染單元格來減輕負載?
  • 問題2:我能做些什麼?有沒有辦法告訴UITableView不要這樣做,或者您會將標題存儲在Core Data中嗎?我顯示日期爲章節標題,所以它可能不會是明智的,它們存儲爲字符串,因爲它們依賴於位置,夏令時間,語言等

回答

0

從你的問題(「店職稱的核心數據? 「)我收集到,你沒有在Core Data中存儲節標題。假設你在內存中使用了一些數組,所以無論表視圖數據源的方法是什麼,你將不得不計算所有500個字符串。

相反,您應該使用完全優化的NSFetchedResultsController。在創建它時給它一個合適的sectionNameKeyPath,你會發現你的表視圖會快速加載。

+0

我確實使用'NSFetchedResultsController',我只是想知道爲什麼'UITableView'調用'titleForHeaderInSection:'即使是不可見的頭文件,當它沒有爲單元格執行時。 – Paul

+0

關於'sectionNameKeyPath':這將解決當前問題,因爲它們必須保持節名稱是最新的,因爲它們取決於位置和其他因素。不管怎麼說,還是要謝謝你。 – Paul

+0

我沒有看到你的觀點。無論如何您必須計算標題,因此將它們存儲在覈心數據中仍然更有效。藉助提取的屬性,您可以自動執行更新。 – Mundi