1

コレクションビューで、各アイテムのインデックスを生成する必要があります。アイテムが並べ替えられると、このインデックスを新しい位置で更新する必要があります。

データは、マネージドNSArrayControllerのコアデータエンティティです。考えられる解決策に最も近いのは、このメソッドをエンティティクラスに実装し、representedObject.dynamicIndexを使用してUIにバインドすることです。

- (NSNumber *) dynamicIndex
{
    NSInteger r = [[[[self managedObjectContext] registeredObjects] allObjects] indexOfObject:self];
    NSNumber *result = [NSNumber numberWithInt:r];
    return result;
}

このソリューションはせいぜい大ざっぱであり、コレクションビューの順序を必ずしも反映していないため、実際には機能しません。

NSCollectionViewでアイテムインデックスを生成または取得するためのモデル/メカニズムを持っている人はいますか?

4

1 に答える 1

1

まず、「エンティティ」と「インスタンス」の違いを理解してください (用語を適切に使用してください)。あなたの問題/解決策を他の人に伝える際に、すべての違いが生まれます。

2 番目: NSCollectionViewItems について心配する必要はありません。コンテナに保持されているそれぞれの「表現されたオブジェクト」について心配する必要はありません。

3 番目: 表示順序をエンティティの永続的な属性にしたいですか?それとも、後でどうなるかに関係なく、アイテムが現在どの位置にあるかを知る必要があるだけですか? 重要な質問です。

4 つ目: Core Data では、順序付けられたコレクションの概念がわかりません。これは、NSSQLiteStoreType などのストア タイプをサポートするためのもので、リスト全体をロードせずに、いくつかのアイテム (または 1 つ) だけをフォールトさせたい場合があります。したがって、永続的な並べ替え順序が必要な場合は、自分で行ってください。これを行うには、「sortOrder」というエンティティに属性を追加して、それを数値型にします。

5番目: 上記の「順序付けされたコレクションがない」問題のため、セットから構築された配列からエンティティの特定のインスタンスのインデックスを見つけようとする試みは、非決定論的な順序で失敗する運命にあります。

6 番目: 配列コントローラーを使用しているため、その並べ替え記述子を設定する必要があります。「sortOrder」キーを使用する必要があります。そうすれば、フェッチされたインスタンスは常に「sortOrder」でソートされたままになります。

7 番目と最後:配列コントローラーのオブジェクトのセット/配列内のオブジェクトのインデックスを取得しようとしている場合は、-arrangedObjects を要求する必要があるため、オブジェクトのインデックスを取得しています。配列コントローラが制御するソートされたコレクション。

それが役立つことを願っています。

ライオンの更新 (10.7)

6 番目のポイントについて: アプリケーションで 10.7 以降をターゲットにしている場合、[NSManagedObject は順序付き関係を提供するようになりました][1] -mutableOrderedSetValueForKey: と -mutableOrderedSetValueForKey: を使用して NSOrderedSets を設定および取得します。わーい!

于 2010-07-13T23:36:49.227 に答える