1

我有一堆 NSOperations 和他们自己的 NSManagedObjectContexts 对我的核心数据存储进行更改并保存并成功地将他们的更改放入主线程的 NSManagedObjectContext。我知道的就这么多。现在我希望在主上下文更新时通知前端 UIViewController。所以我...

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

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(refreshData:)
                                                 name:NSManagedObjectContextDidSaveNotification
                                               object:[NSManagedObject mainThreadManagedObjectContext]];
}

但是,我认为在合并来自后台线程的更改后,主线程的 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;
}

我应该期望从主线程的 NSManagedObjectContext 中听到有关它的保存信息,还是应该在 mergeChangesFromContextDidSaveNotification: 之后发布我自己的通知?

4

1 回答 1

5

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

也许你的前面UIViewController应该观察NSManagedObjectContextObjectsDidChangeNotification

于 2013-04-25T04:31:35.083 回答