2010-12-03 41 views
1

我有一個TableViewController顯示元素CoreData關係的列表。在我的cellForRowAtIndexPath:中,我從集合中獲取了一個sortedArray,然後訪問indexPath.row中的元素。然後在didSelectRowAtIndexPath中,我正在做同樣的事情。每次需要訪問特定索引處的元素時,重新對數組進行排序可以嗎?

這是否被認爲是不好的做法?我發現一個理論上的危險,即如果我的排序方法在後續調用中返回一個不同排序的數組,即使用戶單擊了顯示對象A的單元格,我也可能最終與對象B進行交互。不應該有可能我的排序返回一個不同的排序數組,但我仍然認爲這在技術上是有風險的。

我知道這樣做的唯一方法是讓我的tableViewController保留它自己的NSArray成員,並且當它第一次加載時,通過排序集來填充數組。唯一的問題是,我將不得不單獨維護集合和數組;修改,插入或刪除任何時候用戶改變的東西的對象。這是否被認爲是在表格中顯示CoreData元素的「正確」方式?

回答

2

我肯定會選擇B選項。即使您將維護您的模型數據和控制器中的數組,這應該不會太困難。從控制器添加/刪除項目需要更新模型。您不僅可以解決數據複製的風險問題,而且您可能會看到性能上的巨大提升,因爲每次請求時都不會獲取新排序的數組。

+0

嗯,我只是花了半小時調試一個錯誤,這是因爲我正在更新我的設置,然後期望我的sortedArray仍然反映我的tableView中的內容。所以我認爲這非常證明你是對的。另外,雖然我並不十分關心性能(我的設置只包含6個元素),但當我必須經過幾十次排序方法時,調試更加痛苦。 – GendoIkari 2010-12-03 21:05:47

2

定義「好」。如果您每次都按照相同的方式對相同的密鑰進行排序,那麼效率可能不那麼高。另一方面,週期很便宜;如果你不擔心表現,而且這是最明確的方式,那就去做吧。

你似乎在問什麼「每次都以相同的方式排序」,這就是所謂的「穩定排序」。問問你自己:如果除了使用的密鑰之外的順序,那你爲什麼不按那些排序?

+0

+1表示「穩定排序」。 – GendoIkari 2010-12-03 21:06:08

相關問題