10

UITableViewControllerCore Dataをバッキングストアとして使用してユーザー定義の順序付けを実装するために実行する必要がある手順は何ですか?

それでも応答する必要があります-tableView:moveRowAtIndexPath:fromIndexPath:toIndexPath:か、それともモデルの並べ替えはテーブルビューによって自動的に処理されますか?コアデータモデルファイルの[注文済み]チェックボックスをオンにして、テーブルビューからストアに変更が送信されることを期待できますか、それともさらに多くのことを行う必要がありますか?オブジェクトを取得する方法を変更する必要がありfetchedResultsControllerますか(たとえば、ソート記述子を追加する)?

4

3 に答える 3

8

NSFetchedResultsController または NSOrderedSet を放棄する必要はありません。NSOrderedSet に固執する場合、簡単な方法は、オブジェクトの NSManagedObject サブクラスにメソッドを追加することです。たとえば、Chapter の順序付けられたセットを持つオブジェクト Book がある場合、Chapters オブジェクトにメソッドを追加できます。

- (NSUInteger)indexInBookChapters
{
    NSUInteger index = [self.book.chapters indexOfObject:self];
    return index;
}

ヒント: これをカテゴリに追加して、CoreData 自動生成コードによって上書きされないようにします。

次に、NSFetchedResultsController のソート記述子でこのメソッドを使用できます。

fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"indexInBookChapters" ascending:YES]];
于 2012-10-02T16:21:30.613 に答える
1

fetchedResultsControllerあなたが言及したように、ソート記述子が必要なため、ここでのベストプラクティスは使用しないことです。ダミー プロパティを使用することもできますが、これは明らかに適切な方法ではありません。代わりに、おそらくKey-Value ObservingobjectAtIndexを使用して、必要に応じてinを使用しtableView:cellForRowAtIndexPath:てテーブル データをリロードしますが、ユース ケースによっては、よりシンプルでクラッシュしにくいアプローチがある場合があります。

はい、実装する必要がありますtableView:moveRowAtIndexPath:fromIndexPath:toIndexPath:

こちらもご覧ください

NSFetchedResultsController と NSOrderedSet の関係

于 2012-06-25T11:41:07.370 に答える
0

私はCoreDataエンティティの属性であり、それがNSNumber呼び出されたとしましょうsortOrder

このリストで新しいオブジェクトを初期化するときはsortOrder、デフォルトの並べ替え順序が使用されるように、昇順で割り当てます。

最後に、このsortOrder属性にfetchedResultsController追加を使用するように指示します。sortDescriptor

ユーザーがエントリの位置を調整するときsortOrderに、エントリの前後のエントリの平均にを設定できます。

(ただのアイデア---私はこの問題に対処していないか、実装する必要がありましたが、今後のプロジェクトで検討していました。)

于 2012-03-26T16:05:26.783 に答える