【发布时间】:2013-11-23 09:35:03
【问题描述】:
我正在我的 Core Data 应用程序中实现 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] 变为状态时,我已经设法手动处理这种情况——从旧核心数据中获取所有数据,然后将这些 NSManagedObject 子类保存到启用 iCloud 的新创建的核心数据中. 但是,此代码是非常特定于应用程序的(并且非常不稳定)。我正在寻找更通用的解决方案)。
谢谢
【问题讨论】:
-
如果您仍然对此感到困惑,请查看此链接以在用户更改 iCloud 设置时迁移核心数据文件。 ossh.com.au/design-and-technology/software-development/…
标签: ios objective-c cocoa-touch core-data icloud