0

以这个工作流程为例:

NSFetchedResultsController 绑定到 Main MOC,但 Main MOC 不做真正的保存,它会传播到 Background Writer MOC,当后者保存到 PSC 时,如何通知 NSFetchedResultsController?

我做了一个演示来测试它,它有效,但无法弄清楚它为什么有效?

演示

4

1 回答 1

1

将数据保存到持久性存储时,主 MOC 不会收到通知。

但是,数据最终进入后台写入器 MOC 的唯一方法是通过临时后台 MOC,它通过 UI MOC。因此NSFetchedResultsController,每当临时后台 MOC 将其数据向上传播到 UI MOC 时,都会收到通知,然后一个单独的线程将其保存到 PSC。

收到通知时,数据实际上并不存在于 sqlite 数据库中,NSFetchedResultsController但并非必须如此。

从您的保存方法中也可以看出:

- (void)save
{
    [self.mainContext performBlock:^{
        NSError *mainContextError;
        if(![self.mainContext save:&mainContextError]) {
            NSLog(@"main context error:%@", mainContextError);
        }
        [self.masterContext performBlock:^{
            NSLog(@"saving in masterContext");

            NSError *masterContextError;
            if (![self.masterContext save:&masterContextError]) {
                NSLog(@"master context error:%@", masterContextError);
            }
        }];
    }];
}

[self.mainContext save]被调用后,NSFetchedResultsController会得到通知。

于 2013-06-17T01:53:01.367 回答