Magical Record和iCloud启用/禁用

时间:2014-03-15 10:01:48

标签: ios core-data icloud magicalrecord

如何使用魔法记录来处理以下流程?假设我的应用启用功能可以打开/关闭iCloud同步。

  1. 用户安装该应用。在启动时,他被问及iCloud 偏爱。他的选择:不要使用iCloud。
  2. 用户在应用中创建一些数据。然后他决定存放它 在iCloud中启用iCloud。
  3. 后来由于某种原因,用户在应用中禁用了iCloud。数据 应留在当地。
  4. 如何正确设置魔法录音?

    更新:

    Source code

1 个答案:

答案 0 :(得分:4)

在iOS 7中实现启用或禁用iCloud的开关在iOS 7中也要容易得多,尽管对于大多数应用程序来说可能不是必需的。由于API在创建时将iCloud选项传递给NSPersistentStore时会自动创建单独的文件结构,因此我们可以在本地和iCloud存储之间拥有相同的存储URL和许多相同的选项。这意味着可以通过将iCloud持久存储迁移到具有相同选项的相同URL以及NSPersistentStoreRemoveUbiquitousMetadataOption来完成从iCloud存储到本地存储的切换。此选项将使存储中无处不在的元数据解除关联,并专门用于这些类型的迁移或复制方案。这是一个示例:

- (void)migrateiCloudStoreToLocalStore {
    // assuming you only have one store.
    NSPersistentStore *store = [[_coordinator persistentStores] firstObject]; 

    NSMutableDictionary *localStoreOptions = [[self storeOptions] mutableCopy];
    [localStoreOptions setObject:@YES forKey:NSPersistentStoreRemoveUbiquitousMetadataOption];

    NSPersistentStore *newStore =  [_coordinator migratePersistentStore:store 
                                                                  toURL:[self storeURL] 
                                                                options:localStoreOptions 
                                                               withType:NSSQLiteStoreType error:nil];

    [self reloadStore:newStore];
}

- (void)reloadStore:(NSPersistentStore *)store {
    if (store) {
        [_coordinator removePersistentStore:store error:nil];
    }

    [_coordinator addPersistentStoreWithType:NSSQLiteStoreType 
                               configuration:nil 
                                         URL:[self storeURL] 
                                     options:[self storeOptions] 
                                       error:nil];
}

从本地商店切换回iCloud也很简单;只需使用启用了iCloud的选项进行迁移,然后将具有相同选项的持久存储添加到协调器。

(c)http://www.objc.io/issue-10/icloud-core-data.html