将核心数据应用迁移到iCloud

时间:2014-01-10 08:36:39

标签: core-data merge migration duplicates icloud

我有一个已经存在的核心数据应用程序由dropbox同步,我想在iCloud上迁移(使用iCloudCoreDataStack)。 并且有2个设备(iPhome和iPad)内部具有相同的数据。

我使用icloud将ipad应用程序更新为新应用程序,一切正常并且同步工作正常。

迁移代码:

// check old if old Db exist

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"Livre_de_Cave.sqlite"];

// migrate old persistentStoreCoordinator to icloud and delete it

if ([[NSFileManager defaultManager] fileExistsAtPath:filePath] ) {

    NSLog(@"oldURL");




    NSURL* oldStoreURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:NULL];
    [oldStoreURL URLByAppendingPathComponent:@"Livre_de_Cave.sqlite"];
    oldStoreURL =[oldStoreURL URLByAppendingPathComponent:@"Livre_de_Cave.sqlite"];


    NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption:@YES,
                              NSInferMappingModelAutomaticallyOption:@YES,
                              NSSQLitePragmasOption: @{@"journal_mode": @"DELETE"}
                              };

    NSPersistentStore *store = [self.managedObjectContext.persistentStoreCoordinator  addPersistentStoreWithType:NSSQLiteStoreType

                                                      configuration:nil

                                                                URL:oldStoreURL

                                                            options:options

                                                              error:&error];



 [self.managedObjectContext.persistentStoreCoordinator  migratePersistentStore:store
                                                                         toURL:self.storeURL
                                                                       options:@{ NSPersistentStoreUbiquitousContentNameKey : @"iCloudStore"}
                                                                                  withType:NSSQLiteStoreType
                                                                         error:&error];

    //[store removePersistentStore:store error:&error];
    [[NSFileManager defaultManager] removeItemAtPath:oldStoreURL.path error:&error];


} else {

    NSLog(@"newURL");
    [self.managedObjectContext.persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                                                                       configuration:nil
                                                                                 URL:self.storeURL
                                                                             options:@{ NSPersistentStoreUbiquitousContentNameKey : @"iCloudStore" }
                                                                               error:&error];



}

当我更新iphone时,所有核心数据条目都是重复的,我的原因是:我合并现有的商店与icloud商店有相同的信息。 如果你有并且想要避免......

由于

1 个答案:

答案 0 :(得分:0)

等待合并完成(侦听核心数据通知),然后检查商店以查看数据是否已存在。