0

What is the best way to implement arbitrary row reordering in a tableview that uses core data? The approach that seems obvious to me is to add a rowOrder attribute of type Int16 to the entity that is being reordered in the tableview and manually iterate through the entity updating the rowOrder attributes of all the rows whenever the user finishes reordering.

That is an incredibly inelegant solution though. I'm hoping there is a better approach that doesn't require possibly hundreds of updates whenever the user reorders things.

4

2 に答える 2

1

順序付けがデータ モデルでモーダル化して保存する必要がある場合は、とにかく順序付けをエンティティ グラフの一部にする必要があります。

適切で軽量なソリューションは、Order注文される実際のエンティティと 1 対 1 の関係を持つエンティティを作成することです。更新を簡単にするために、オブジェクトのリンク リストのような構造を作成します。このようなもの:

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

カスタム サブクラスを作成する場合はinsert、新しいオブジェクトをチェーンに挿入し、メッセージをnextリレーションシップに送信して、各オブジェクトに順序を 1 つ増やしてからメッセージを次の順序に増やすように指示するメソッドを提供できます。メソッドはそのdelete逆です。これにより、順序付けがモデルに不可欠になり、うまくカプセル化されます。この基本クラスを作成するのは簡単なので、必要に応じて再利用できます。

大きな利点は、小さなOrderオブジェクトがメモリ内で生きているだけでよいことです。

編集:

もちろん、これを別のリンクされたオブジェクトで拡張して、セクション情報を提供できます。そのエンティティをエンティティに関連付けてからOrder、セクションにある注文番号を入力してください。

于 2010-07-08T02:34:16.897 に答える
0

これより良い方法はなく、それが受け入れられている解決策です。Core Data には内部的に行の順序付けがないため、自分で行う必要があります。ただし、実際には多くのコードではありません。

于 2010-07-07T13:06:01.173 に答える