【问题标题】:Does NSManagedObjectContext's mergeChangesFromContextDidSaveNotification: post NSManagedObjectContextDidSaveNotification?NSManagedObjectContext 的 mergeChangesFromContextDidSaveNotification: 是否发布 NSManagedObjectContextDidSaveNotification?
【发布时间】:2013-04-25 04:17:27
【问题描述】:

我有一堆带有自己的 NSManagedObjectContexts 的 NSOperations 对我的核心数据存储进行更改,并保存并成功地将他们的更改放入主线程的 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: 之后发布我自己的通知?

【问题讨论】:

    标签: objective-c core-data nsmanagedobjectcontext


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢 rob,我也尝试过,并且在我的上下文更改了大约 500 次时收到了通知。你知道是什么原因造成的吗? (我在 mergeChangesFromContextDidSaveNotification: 被调用时放了一个断点,每次都看到它被调用)太奇怪了。
    • 实际上,我似乎没有持有对任何对象的任何引用(只有错误),我认为这就是我没有收到通知的原因。作为测试,我从商店中选择了一个物品来保存并每次都收到通知。需要找出最合乎逻辑的设置方式,但这对我有帮助,谢谢!
    猜你喜欢
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 2013-10-13
    • 1970-01-01
    相关资源
    最近更新 更多