2010-12-03 39 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

相关问题