2

CoreDataを使用するアプリケーションを開発しています。

したがって、.sqliteファイルでは、主キー自体を管理します。

主キー属性名はZ_PKです。

私の問題は、テーブルのデータを主キーの昇順で並べ替えたいということです。

私はそのコードを使用しています

NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"_PK" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
[sort release];

しかし、それは機能していません。

「_PK」の代わりに「タイトル」を使用している場合は、正常に機能しています

NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
[sort release];

では、テーブルの主キーを使用する別の方法はありますか?

4

1 に答える 1

4

CoreDataは永続オブジェクトグラフを管理します。RDBMではありません。一意の主キーを制御できないため、その値を制御できません。これは単なる実装の詳細であり、いかなる理由でも参照されるべきではありません。

それで、なぜあなたはそれに基づいてソートしたいのですか?私はいくつかの理由を考えることができます...

  1. データベースに追加された順序でオブジェクトにアクセスする必要があります。ただし、これはいくつかの方法で簡単に行うことができます。

1a。各エンティティにフィールドを追加できます。UUIDに設定することも、整数を増やすように設定することもできます。

1b。「Entity」と1対多の順序で関係する「EntityList」のようなエンティティを持つことができます。

1c。エンティティからそれ自体に1対1の関係を追加し、リンクリストのように管理することができます。エンティティを追加するたびに、リストの最後に配置します。

このソリューションのいずれかを使用すると、追加された順にエンティティオブジェクトにアクセスできます。

  1. または、表示される順序は実際には気にしませんが、一貫した順序が必要です。

2a。primaryKey属性を追加し、それにUUIDを割り当てます。

2b。順序付けられたto-many関係を使用します。

最後に、主キーベースのアクセスが本当に必要な場合は、特別なキーアクセスに使用する別のsqliteデータベースを用意することをお勧めします。次に、CoreDataストア内のオブジェクトのobjectIDにキーを関連付けることができます。

于 2012-04-15T04:09:35.470 に答える