WatchKit和应用程序之间的核心数据实时同步

时间:2015-03-25 20:30:24

标签: ios objective-c core-data nsmanagedobjectcontext watchkit

我正在为iPhone应用程序编写WatchKit扩展。我使用App Groups共享Core Data。这是有效的,数据是共享的。现在,如果应用程序在前台运行并且从监视器向数据库添加了新的数据库条目,我想刷新iPhone应用程序内的数据。跟踪我订阅的NSManagedObjectContextDidSaveNotification

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

合并方法:

- (void)mergeChanges:(NSNotification *)notification {
    if(notification.object != self.managedObjectContext) {
        [self performSelectorOnMainThread:@selector(updateMainContext:) withObject:notification waitUntilDone:NO];
    }
}

更新主要上下文方法:

- (void)updateMainContext:(NSNotification *)notification {
    assert([NSThread isMainThread]);
    [self.managedObjectContext mergeChangesFromContextDidSaveNotification:notification];
}

我正在尝试在模拟器上测试它(通过同时运行iPhone和Watch模拟器),但遗憾的是NSManagedObjectContextDidSaveNotification未被调用。

实际上是否可以在模拟器上进行测试?如果是,这是正确的方法吗?

1 个答案:

答案 0 :(得分:2)

您无法使用NSNotificationCenter,因为iOS应用和扩展程序是不同的进程。看看使用MMWormhole在进程之间发布自己的通知。您可以在扩展程序和iOS应用程序中收听NSManagedObjectContextDidSaveNotification,然后使用MMWormhole让其他进程了解通知。此外,您还需要手动刷新托管数据对象(请参阅[NSManagedObjectContext refreshObject:(NSManagedObject *)object mergeChanges:(BOOL)flag])。