0

executeFetchRequestを実行した後、配列オブジェクトに割り当てられた値が「無秩序」になる理由がわかりません。さて、ここでフェッチが問題になるかどうかはわかりません。これがコードです。

objects=[NSArray arrayWithObjects:@"a",@"b",@"c",@"d",@"e",nil];

NSManagedObject *DB = nil;

for (int i=0;i<[objects count];i++){

DB = [NSEntityDescription                   
                insertNewObjectForEntityForName:@"dbTable" 
                inManagedObjectContext:context];

[DB setValue:[objects objectAtIndex:i] forKey:@"item"];
[DB setValue:[NSString stringWithFormat:@"%3.2f", 0] forKey:@"value"];       
}

objects = [context executeFetchRequest:request error:&error];

印刷

配列オブジェクトへのフェッチ実行後の新しい間違った順序
インデックス0::アイテム:d
インデックス1 ::アイテム:c
インデックス2 ::アイテム:e
インデックス3 ::アイテム:b
インデックス4 ::アイテム:a

ありがとうございました。

4

3 に答える 3

2

基盤となるデータベース アーキテクチャにより、Core Data はすべてのオブジェクトと対多参照を順不同で格納します。Alex が説明しているように、NSSortDescriptor を適用しない限り、フェッチ要求から返される順序は保証されません。 Cocoa メーリング リストのこのスレッドでは、関連する問題と考えられる解決策について詳しく説明しています。

これらのソリューションには、フェッチ要求を実行するときに並べ替えるインデックス プロパティを用意することや、管理対象オブジェクトのリンク リストを実装してそれを順番にトラバースすることが含まれます。Brian Webster は NSManagedObject のサブクラスを作成しました。これにより、Core Data オブジェクトで順序付けられた対多の関係を維持できます。ソース コードはここにあります。

于 2009-10-15T22:04:48.413 に答える
1

NSSortDescriptorフェッチリクエストにを適用します。例:

NSSortDescriptor *itemDescriptor = [[NSSortDescriptor alloc] initWithKey:@"item" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:itemDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[sortDescriptors release];
[itemDescriptor release];

名前で並べ替えますitem。代わりに、を使用できますvalue

于 2009-10-15T13:17:07.153 に答える
0

アイテムを特定のキーで並べ替えることを指定せずにフェッチ要求を実行すると、順序付けされていない結果配列が得られます。次のようなコードスニペットを使用して、ソート記述子を使用してフェッチ要求を拡張できます。

    // Edit the sort key as appropriate.
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"value" ascending:YES selector:@selector(caseInsensitiveCompare:)];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

    [fetchRequest setSortDescriptors:sortDescriptors];
    [sortDescriptor release];
    [sortDescriptors release];
于 2009-10-15T13:13:01.293 に答える