Objective c NSFetchedResultsController正在接收关系更改的didChangeObject?

Objective c NSFetchedResultsController正在接收关系更改的didChangeObject?,objective-c,core-data,nsfetchedresultscontroller,Objective C,Core Data,Nsfetchedresultscontroller,我有一个表视图,显示事件(核心数据备份对象)。我有另一张桌子,上面有票。活动有很多门票 当我创建一个新的票证时,将其保存到持久存储中,控制事件的tableview会收到didChangeObject通知。我不想这样。实际上,表视图不应该关心任何变化。我碰巧创建/更改/修改了很多票证,根据Time Profiler,我在主线程上处理那些didChangeObject会损失一些宝贵的时间 我调试了它,它似乎发生在这里: ticket.event = event; 我在该行前后设置了断点,po,将t

我有一个表视图,显示
事件
(核心数据备份对象)。我有另一张桌子,上面有
。活动有很多门票

当我创建一个新的票证时,将其保存到持久存储中,控制
事件的tableview会收到
didChangeObject
通知。我不想这样。实际上,表视图不应该关心任何变化。我碰巧创建/更改/修改了很多票证,根据Time Profiler,我在主线程上处理那些didChangeObject会损失一些宝贵的时间

我调试了它,它似乎发生在这里:

ticket.event = event;

我在该行前后设置了断点,
po
,将
ticket.managedObjectContext.updatedObjects
分配到控制台,事件将在我将事件分配给ticket后立即显示

现在我将使用以下内容:

- (void)viewWillAppear:(BOOL)animated
{
  [super viewWillAppear:animated];
  self.fetchedResultsController.delegate = self;
  NSPredicate *predicate = [NSPredicate predicateWithFormat:@"end_date >= %@", [NSDate date]];
  self.fetchedResultsController.fetchRequest.predicate = predicate;

  NSError *error;
  BOOL success = [self.fetchedResultsController performFetch:&error];
  if (!success)
    NSLog(@"ERROR: performing fetch: %@", error);

  [self.tableView reloadData];
}

- (void)viewWillDisappear:(BOOL)animated
{
  [super viewWillDisappear:animated];
  // we are not interested in changes when this view is offscreen
  self.fetchedResultsController.delegate = nil;
}

虽然长期以来,我一直在研究一种解决方案,只在用户想要提交其更改时保存上下文,因为我在单元格中有一堆-/+UIStepper,我认为有一个
UIButton
,可以在单元格中设置动画,按下该按钮时可以保存上下文,而不是每次更改
UIStepper
时都保存上下文。

您是否(推荐)在事件和票证之间设置了反向关系?如果是,这就是触发事件更新通知的原因。相关对象中的更改不会触发FRC,但关系中的更改会触发FRC(因为该关系是相关对象的属性)。好吧,这是有道理的,因为我可以预见许多情况下,你会希望通知。。。。也许我可以尝试使用不同的托管对象上下文,并更改保存到持久性存储的方式。当视图消失时,将fetchedresultscontroller.delegate设置为nil,然后将其设置回,并在视图上重新加载Data/performFetch,这是一个好的解决方案吗?这能解决我的性能问题吗?这是一个很好的方法。我在一个有类似问题的应用程序上工作(持续的VC,即使在屏幕外),我们就是这么做的。