2013-08-01 43 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