我正在我的核心数据应用程序中实现iCloud支持(仅限iOS 7,尚未发布,iCloud支持将从第一天开始)。我已经查看了有关iCloud变化的WWDC 2013 207会话,我很高兴看到这些改进(我之前也有过iCloud的经验)。
事情真的很棒。但是,当用户从系统首选项启用或禁用iCloud时,我不确定如何处理这种情况 - 这会导致在另一个目录中创建新的.sqlite
文件,从而导致用户数据丢失。
以下是我如何实施持久存储添加:
- (void) addPersistentStoreToCoordinator {
NSMutableDictionary *options = [NSMutableDictionary dictionary];
[options setObject:@YES forKey:NSMigratePersistentStoresAutomaticallyOption];
[options setObject:@YES forKey:NSInferMappingModelAutomaticallyOption];
NSURL *iCloud = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier: nil];
if (iCloud) {
[options setObject:@"ABC123~com~myapp~myapp" forKey:NSPersistentStoreUbiquitousContentNameKey];
}
NSError* error;
// the only difference in this call that makes the store an iCloud enabled store
// is the NSPersistentStoreUbiquitousContentNameKey in options.
[persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:self.storeURL
options:options
error:&error];
}
- (NSURL *)storeURL {
NSURL *documentsDirectory = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory
inDomain:NSUserDomainMask
appropriateForURL:nil
create:YES
error:NULL];
return [documentsDirectory URLByAppendingPathComponent:@"MyApp.sqlite"];
}
当用户在设置中关闭/打开iCloud首选项时,如何从Core Data保存数据?
(附注:当iCloud从状态[OFF]
> [ON]
开始时,我已设法手动处理此案例 - 从旧Core Data获取所有数据,然后将这些NSManagedObject子类保存到新创建的核心数据已启用iCloud。但是,此代码非常适合应用程序(并且非常不稳定)。我正在寻找更通用的解决方案。)
由于