核心数据组合查询

时间:2010-05-10 14:10:09

标签: iphone objective-c

嘿,我有与CoreData有关的问题。我的iphone项目有2个实体,组织和品牌,有1到多个“BrandsToOrg”关系和反向。

所以我的项目有一个Mapview,当你点击那些Organisations时,你可以看到所有的组织和一个小的子视图。在子视图中有一个“show Brands”按钮,它应该初始化一个新的TableView,它只显示品牌属于被选中的组织。 我有什么想法可以编码吗?

THX

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(TitleMedium == %@)",@"Rock Antenne"];????
NSFetchRequest *request = [[NSFetchRequest alloc] init];
  NSEntityDescription *entity = [NSEntityDescription entityForName:self.entityName inManagedObjectContext:managedObjectContext];
  [request setEntity:entity]; 


  if(predicate != nil)
  {
   [request setPredicate:predicate];
  }

  // If a sort key was passed, use it for sorting.
  NSString *sortKey=@"TitleMedium";
  BOOL sortAscending=YES;
  if(sortKey != nil)
  {
   NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:sortKey ascending:sortAscending];
   NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
   [request setSortDescriptors:sortDescriptors];
   [sortDescriptors release];
   [sortDescriptor release];
  }

  NSError *error;

  NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];

  [request release];
  [self setEntityArray:mutableFetchResults];

1 个答案:

答案 0 :(得分:0)

以下是一个如何使用orgs的顶级UITableView和品牌的详细表格视图来执行此操作的示例。在顶层,您对组织执行获取请求并显示它们。选择特定的一个时,您可以创建品牌的详细视图。 BrandsViewController对象有一个“org”属性,告诉显示什么;然后,它可以参考“org.brands”(这是核心数据的一对多关系)来定位该显示的所有品牌。请注意,您无需在BrandsViewController中进行明确的Core Data提取即可获得品牌。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

BrandsViewController *targetViewController = [[BrandsViewController alloc]
    initWithNibName:@"BrandsView" bundle:nil];
    // pass managedObjectContext along to new view controller
targetViewController.managedObjectContext = self.managedObjectContext;

// Pass the selected org to the new view controller
targetViewController.org = (Organisation *)[fetchedResultsController objectAtIndexPath:indexPath];

[[self navigationController] pushViewController:targetViewController animated:YES];
[targetViewController release];
}