NSManagedObjectContext的mergeChangesFromContextDidSaveNotification:post NSManagedObjectContextDidSaveNotification?

rob*_*408 1 core-data objective-c nsmanagedobjectcontext

我有一堆NSOperations和他们自己的NSManagedObjectContexts对我的Core Data存储进行了更改并保存并成功地将他们的更改变为主线程的NSManagedObjectContext.我知道这个.现在我希望在主要上下文更新时通知前UIViewController.所以我...

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(refreshData:)
                                                 name:NSManagedObjectContextDidSaveNotification
                                               object:[NSManagedObject mainThreadManagedObjectContext]];
}
Run Code Online (Sandbox Code Playgroud)

但是,我不认为在合并后台线程的更改后,主线程的NSManagedObjectContext会发布自己的任何通知.我试图在文档中的哪个地方找到Apple说我应该在告诉主要线程合并更改或其他一些之后发布我自己,但没有运气.为了在我的NSOperation中额外参考,我有......

+ (void)mergeChanges:(NSNotification *)notification
{
    NSManagedObjectContext *managedObjectContext = [self mainThreadManagedObjectContext];

    [managedObjectContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:)
                                           withObject:notification
                                        waitUntilDone:YES];
}

+ (NSManagedObjectContext *)adHocManagedObjectContext
{
    NSManagedObjectContext *adHocManagedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] adHocManagedObjectContext];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(mergeChanges:)
                                                 name:NSManagedObjectContextDidSaveNotification
                                               object:adHocManagedObjectContext];

    return adHocManagedObjectContext;
}
Run Code Online (Sandbox Code Playgroud)

我是否希望听到主线程的NSManagedObjectContext有关它的保存,或者我应该在mergeChangesFromContextDidSaveNotification后发布我自己的通知:?

rob*_*off 5

mergeChangesFromContextDidSaveNotification: 不发布NSManagedObjectContextDidSaveNotification,因为mergeChangesFromContextDidSaveNotification:不告诉上下文保存.

也许你的前线UIViewController应该观察NSManagedObjectContextObjectsDidChangeNotification.