从NSFetchedResultsController检测sectionNameKeyPath的更新

时间:2011-03-16 08:22:58

标签: objective-c ios core-data updates

情况就是这样。我有2个型号:

  • 运动(带属性名称和关系球员)
  • 播放器(具有属性名称和relationShip sport)

在ViewController中,我不想在体育命令的UITableView中显示所有玩家。 当玩家名称更改时,将调用NSFetchedResultsControllerDelegate回调。

但是当更新Sport的名称时,不会调用NSFetchedResultsControllerDelegate回调。

这是正常行为吗?我如何知道Sport.name的更新(不创建另一个NSFetchedResultsController)?

谢谢你,最诚挚的问候。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"sport.name != NULL"];
[fetchRequest setPredicate:predicate];


NSArray *sortDescriptors = [NSArray arrayWithObjects:
                              [NSSortDescriptor sortDescriptorWithKey:@"sport.name" ascending:YES], 
                              [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES],
                              nil];
[fetchRequest setSortDescriptors:sortDescriptors];


NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Player" 
                                         inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entityDescription];


fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                                          managedObjectContext:self.managedObjectContext 
                                         sectionNameKeyPath:@"sport.name" 
                                               cacheName:nil];
[fetchRequest release];

fetchedResultsController.delegate = self;


NSError *error = nil;
if ([fetchedResultsController performFetch:&error] == NO) {
     ALog(@"Fetch error: %@", [error localizedDescription]);
}

1 个答案:

答案 0 :(得分:0)

您可以使用提示:

 If (fetchresultcontroller != nil || isOtherEnthityUpdate)
 {
      return fetchresultcontroller;
 }

并且从你检查其他实体的任何地方重新加载self.tableview。它可以是通知中心或其他桌面视图。