4

我正在我的 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 从 state [OFF]>进入的情况[ON]——从旧的 Core Data 中获取所有数据,然后将这些 NSManagedObject 子类保存到启用 iCloud 的新创建的 Core Data 中。但是,这段代码非常适用具体(而且非常不稳定)。我正在寻找更通用的解决方案)。

谢谢

4

1 回答 1

1

我有完全相同的问题,发现这个https://gist.github.com/mluisbrown/7015953。现在非常适合我。

于 2013-11-11T17:30:54.913 回答