iphone SDK:使用核心数据重新排序任意tableview行

时间:2010-07-07 06:47:02

标签: iphone core-data tableview

在使用核心数据的tableview中实现任意行重新排序的最佳方法是什么?对我来说,显而易见的方法是将类型为Int16的rowOrder属性添加到正在表视图中重新排序的实体,并在用户完成重新排序时手动迭代实体更新所有行的rowOrder属性。

但这是一个非常不优雅的解决方案。我希望有一种更好的方法,只要用户重新排序,就不需要数百次更新。

2 个答案:

答案 0 :(得分:1)

如果排序是数据模型应该模态和存储的东西,那么顺序应该是实体图的一部分。

一个好的,轻量级的解决方案是创建一个Order实体,该实体与所订购的实际实体具有一对一的关系。要轻松更新,请创建类似于对象的链接列表结构。像这样:

Order{
    order:int;
    orderedObject<--(required,nullify)-->OrderObject.order
    previous<--(optional,nullify)-->Order.next;
    next<--(optional,nullify)-->Order.previous;
}

如果您创建自定义子类,则可以提供insert方法,该方法在链中插入新对象,然后向下发送next关系的消息,并告诉每个对象增加其顺序然后将消息发送到下一个消息。 delete方法恰恰相反。这使得排序成为模型的整体,并且很好地封装了。为此创建基类很容易,因此您可以根据需要重用它。

最大的好处是它只需要小Order个对象在内存中存活。

编辑:

当然,您可以使用另一个链接对象扩展它以提供部分信息。只需将该实体与Order实体关联,然后提供订单号作为该部分中的订单号。

答案 1 :(得分:0)

没有更好的方法,这是公认的解决方案。核心数据内部没有行排序,因此您需要自己完成。但实际上并不是很多代码。