Core data iCloud通知没有在我的iOS 7应用程序中触发
我对核心数据和iCloud还不熟悉,但我已经设法让这两种技术都发挥作用(大部分)。我的数据正在iOS设备之间同步,但我不知道何时同步。:) 我正在尝试侦听iCloud何时可以进行更改,以便刷新UI 我在我的AppDelegate中设置了核心数据和iCloud,如下所示:大部分都是我应用的示例代码,但它似乎运行良好 在显示应用程序数据的单独视图控制器中,我将通知设置为:Core data iCloud通知没有在我的iOS 7应用程序中触发,core-data,ios7,icloud,nsnotificationcenter,Core Data,Ios7,Icloud,Nsnotificationcenter,我对核心数据和iCloud还不熟悉,但我已经设法让这两种技术都发挥作用(大部分)。我的数据正在iOS设备之间同步,但我不知道何时同步。:) 我正在尝试侦听iCloud何时可以进行更改,以便刷新UI 我在我的AppDelegate中设置了核心数据和iCloud,如下所示:大部分都是我应用的示例代码,但它似乎运行良好 在显示应用程序数据的单独视图控制器中,我将通知设置为: - (void)viewDidLoad { [super viewDidLoad]; //Register notif
- (void)viewDidLoad
{
[super viewDidLoad];
//Register notifications
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updatesAvailable) name:NSPersistentStoreDidImportUbiquitousContentChangesNotification object:nil];
}
- (void)updatesAvailable{
//This never fires...
NSLog(@"Update available...");
[PPStatusBar showSuccessWithStatus:@"Update available..."];
}
- (void)CoreData_StoreDidImportUbiquitousContentChanges:(NSNotification*) notification {
}
下面是我的问题:
updatesAvailable
方法重新查询我的实体,那么在调用NSPersistentStoreDidImportUbiquitousContentChangesNotification
时,来自iCloud的数据是否一直进入核心数据对象图提前感谢您的帮助。:) 问题似乎出在addObserver调用中。对象为nil,但它应该是您的持久存储协调器。例如:
[notificationCentre addObserver:self
selector:@selector(CoreData_StoreDidImportUbiquitousContentChanges:)
name:NSPersistentStoreDidImportUbiquitousContentChangesNotification
object:coordinator];
然后调用如下结构的通知处理程序:
- (void)viewDidLoad
{
[super viewDidLoad];
//Register notifications
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updatesAvailable) name:NSPersistentStoreDidImportUbiquitousContentChangesNotification object:nil];
}
- (void)updatesAvailable{
//This never fires...
NSLog(@"Update available...");
[PPStatusBar showSuccessWithStatus:@"Update available..."];
}
- (void)CoreData_StoreDidImportUbiquitousContentChanges:(NSNotification*) notification {
}
要回答您的具体问题:
dispatch_async(dispatch_get_main_queue(), ^{
// Refresh UI here
});
感谢您周到的回复。这很有帮助。将商店协调员添加到通知中会有所帮助,但我仍然有一些问题:(1)即使我等待30秒,iCloud同步似乎也不会发生。不过,触发iCloud同步会触发通知。(2) 一旦收到此通知,我的数据库就没有可用的更改(我重新查询核心数据,但它没有新记录)。(3) 重建应用程序时始终显示新数据。有什么想法吗?(1)长延时是在设备上还是仅在模拟器上?我发现在过去模拟器有时会停止同步。完全关闭并重新启动或重新启动计算机通常会有所帮助。(2)您可以尝试在导入更改通知结束时执行上下文保存。我的设置中间接地包含了这一点,这可能就是为什么我可以在导入通知结束时查询核心数据的原因。在仅设备测试中,延迟似乎较短,但不像我预期的那样接近即时。在通知方法内部重新查询时,我仍然无法从核心数据中获取最新数据。我是否应该获取通知返回的对象并将其保存到核心数据?我想这是自动发生的。试试这些样品,它们可能会对你有所帮助。您不能假定任何同步时间范围。。。在模拟器中,您需要使用调试触发器iCloud Sync使同步工作。谢谢,@DuncanGroenewald!我来看看。