1

2 つの異なるエンティティからフェッチを実行し、それらをマージしてから、両方のエンティティが持つフィールド「lastModifiedDate」に基づいて並べ替える必要があります。lastModifiedDate は NSDate です

NSFetchRequest *fetchRequest1 = [[NSFetchRequest alloc] init];
NSFetchRequest *fetchRequest2 = [[NSFetchRequest alloc] init];

NSEntityDescription *entity1 = [NSEntityDescription entityForName:@"Entity1" inManagedObjectContext:self.managedObjectContext];
    [fetchRequest1 setEntity:entity1];

NSEntityDescription *entity2 = [NSEntityDescription entityForName:@"Entity2" inManagedObjectContext:self.managedObjectContext];
    [fetchRequest2 setEntity:entity2];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastModeifiedDate" ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];

[fetchRequest1 setSortDescriptors:sortDescriptors];
[fetchRequest2 setSortDescriptors:sortDescriptors];

[self.managedObjectContext executeFetchRequest:fetchRequest onSuccess:^(NSArray *results) {
    [self.refreshControl endRefreshing];
    self.objects = results; //objects is an array @property
    [self.tableView reloadData];

} onFailure:^(NSError *error) {

    [self.refreshControl endRefreshing];
    NSLog(@"An error %@, %@", error, [error userInfo]);
}

私はここで立ち往生しています。fetchRequest1 と fetchRequest2 をマージし、オブジェクトを tableViewController に降順で表示する必要があります。ありがとう。

4

1 に答える 1

2

2 つの取得リクエストをマージすることはできませんが、取得した配列をマージして並べ替えることができます。

NSArray *results1 = ...; // from first fetch request;
NSArray *results2 = ...; // from second fetch request;
NSMutableArray *merged = [[NSMutableArray alloc] init];
[merged addObjectsFromArray:results1];
[merged addObjectsFromArray:results2];
[merged sortUsingDescriptors:@[sortDescriptor]];

または、エンティティ "Entity" を定義し、それ を "Entity1" と "Entity2"の親エンティティにし、親エンティティですべての共通プロパティ ("lastModifiedDate" など) を定義することもできます。次に、「Entity」オブジェクトを取得してソートできます。

(エンティティ継承の考えられる欠点は、Core Data がすべての「Entity」、「Entity1」、および「Entity2」オブジェクトに対して単一のテーブルを使用することです。これは、両方に共通ではない多くのプロパティがある場合には最適ではありません。)

于 2013-08-01T13:32:01.110 に答える