のコアデータドキュメント次のように述べています。
[fetched] プロパティに関連付けられたフェッチ要求にはソート順序を設定できるため、フェッチされたプロパティは順序付けされる場合があります。
Xcode のデータ モデル エディターで、フェッチされたプロパティの並べ替え記述子を指定するにはどうすればよいですか? 関連するフィールドがどこにも見つかりません。 iPhone プラットフォーム用に開発していますが、これが何か違いをもたらすかどうかはわかりません。
グラフィカル モデル エディターでこれが不可能な場合は、コード内でフェッチされたプロパティのフェッチ要求を変更して、ソート記述子を持つようにするにはどうすればよいですか?
ベストアンサー1
実際に、モデルが取得したプロパティを取得し、それにソート記述子を追加することができます (これもコード内)。Core Data を含むテンプレートの 1 つを選択した場合に、XCode が AppDelegate で生成する標準メソッドでこれを行いました。
ちなみに、これはデータ モデル内のすべてのモデルで取得されたすべてのプロパティを並べ替えます。これを巧妙に応用することもできますが、これは、それぞれが名前で並べ替える必要のある取得されたプロパティを持つ 7 つの個別のモデルの並べ替えを処理する最も簡潔な方法でした。うまく機能します。
/**
Returns the managed object model for the application.
If the model doesn't already exist, it is created by merging all of the models found in the application bundle.
*/
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
// Find the fetched properties, and make them sorted...
for (NSEntityDescription *entity in [managedObjectModel entities]) {
for (NSPropertyDescription *property in [entity properties]) {
if ([property isKindOfClass:[NSFetchedPropertyDescription class]]) {
NSFetchedPropertyDescription *fetchedProperty = (NSFetchedPropertyDescription *)property;
NSFetchRequest *fetchRequest = [fetchedProperty fetchRequest];
// Only sort by name if the destination entity actually has a "name" field
if ([[[[fetchRequest entity] propertiesByName] allKeys] containsObject:@"name"]) {
NSSortDescriptor *sortByName = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortByName]];
[sortByName release];
}
}
}
}
return managedObjectModel;
}