我已经为我的应用程序添加了iCloud支持。当用户更新他的数据时,我会收到通知
这很好。
然而,我遇到了以下问题:
NSPersistentStoreDidImportUbiquitousContentChangesNotification
。这很好。
然而,我遇到了以下问题:
- 我找不到一个
will
版本的通知,可以用来显示加载器,例如数据库将要被更新。 - 由于我找不到
will
版本,所以我使用相同的通知来显示一个加载器,告诉用户数据库正在更新... 这个通知的问题在于,如果iCloud中的内容相对较大,则它可能会被多次调用,从而导致我显示多个加载指示器! - 有没有一种方法可以手动通过iCloud触发更新?
.
我通过以下方式向Core Data添加了iCloud支持:
在NSManagedObjectContext中
_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
_managedObjectContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy;
在 NSPersistentStoreCoordinator 中
[_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:@{NSPersistentStoreUbiquitousContentNameKey:@"iCloudStore"} error:nil];
在 NSPersistentStoreDidImportUbiquitousContentChangesNotification 通知方法中
(涉及 IT 技术相关内容)- (void)persistentStoreDidImportUbiquitousContentChanges:(NSNotification *)notification
{
NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
[managedObjectContext performBlock:^{
[managedObjectContext mergeChangesFromContextDidSaveNotification:notification];
dispatch_async(dispatch_get_main_queue(), ^{
UIWindow *mainWindow = [[[UIApplication sharedApplication] delegate] window];
MBProgressHUD *hud = [MBProgressHUD HUDForView:mainWindow];
if (hud == nil) {
hud = [[MBProgressHUD alloc] initWithWindow:mainWindow];
}
[mainWindow addSubview:hud];
hud.labelText = NSLocalizedString(@"Progress updated", nil);
[hud show:YES];
[hud hide:YES afterDelay:1];
// Post Notification
[[NSNotificationCenter defaultCenter] postNotificationName:RESET_APPLICATION_NOTIFICATION object:nil];
});
}];
}