我在App Store中有一个完全构建的基于Core Data的应用程序,并且正在进行更新,我正在为应用程序带来iCloud同步功能。这将是用户启用而不是立即启用它的选项。
我有UITabBarController
,在第5个标签中,我有一个设置窗格,其中一个选项是通过使用Switch打开或关闭iCloud同步。
我不确定的是如何启用这样的内容,因为SettingsViewController
(第五个标签页)需要与AppDelegate
进行实质性的对话才能调用此内容。
persistentStoreCoordinator
中的AppDelegate
位于以下位置:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Lite.sqlite"];
NSError *error = nil;
NSURL *cloudURL = [self grabCloudPath:@"iCloud"];
NSDictionary *options = nil;
if ([[NSUserDefaults standardUserDefaults]boolForKey:@"OnLatestVersion"]) {
options = @{ NSMigratePersistentStoresAutomaticallyOption : @YES,
NSInferMappingModelAutomaticallyOption : @YES,
NSPersistentStoreUbiquitousContentURLKey: cloudURL, NSPersistentStoreUbiquitousContentNameKey: @"LiteCloud"};
NSLog(@"Using iCloud from migration");
}
else
{
NSLog(@"Using the other store without the iCloud Migration");
options = @{ NSMigratePersistentStoresAutomaticallyOption : @YES,
NSInferMappingModelAutomaticallyOption : @YES};
}
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return _persistentStoreCoordinator;
}
与此问题无关为什么persistentStore就是这样,但实质上,我想确保在SettingsViewController中,当用户打开iCloud开关时,它会调用iCloud同步。
我看过很多关于关闭iCloud的帖子,但从来没有人谈过如何做到这一点,等等。
修改:小更新
通过一些思考,或许我可以这样做:
这是对的吗?理论上我理解,如果是这种情况,但只是不确定如何最好地实现这一点。
如果这一切都是正确的,那么下面的内容将适用于applicationDidFinishLaunchingWithOptions
:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reloadFetchedResults:)
name:@"SomethingChanged"
object:[[UIApplication sharedApplication] delegate]];
如何实现这样的目标呢?任何想法将不胜感激。
答案 0 :(得分:0)
设置NSUserDefaults密钥,然后使用NSNotification检查该密钥应该可以正常工作。在设置视图中,当翻转开关时,您在NSUserDefaults中更改BOOL值,然后在appDelegate中调用NSNotification以根据更改的NSUserDefaults值进行更新。在applicationDidFinishLaunchingWithOptions中,就像你说的那样:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reloadFetchedResults)
name:@"SomethingChanged"
object:nil];
并且在reloadFetchedResults中,您可以检查在设置视图中设置的NSUserDefaults中的密钥。在NSUserDefaults中更改密钥后立即在设置视图中调用[[NSNotificationCenter defaultCenter] postNotification: @"SomethingChanged"];