2013-08-01 40 views
1

我需要從兩個不同實體執行提取操作,將它們合併,然後根據兩個實體都具有的字段對其進行排序:'lastModifiedDate'。 lastModifiedDate是NSDateiOS:兩個實體 - 獲取,合併和排序

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中。謝謝。

回答

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]]; 

或者,你可以定義一個實體「實體」,使該父實體 爲「 Entity1「和」Entity2「,並定義父實體中的所有常用屬性(例如 」lastModifiedDate「)。然後你可以獲取並排序「實體」對象。

(實體繼承的一個可能的缺點是,核心數據使用單個表的所有 「實體」,「ENTITY1」和「ENTITY2」的對象。這是不是最佳的,如果有很多 性質是不常見的兩者)。

+0

謝謝!這真的是我需要的。在單個'UITableView'中顯示不同的子實體是我的目標:) – k06a