【问题标题】:Migrate core data Apps to iCloud将核心数据应用程序迁移到 iCloud
【发布时间】:2026-02-15 06:25:02
【问题描述】:

我已经有一个由 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 存储合并,并具有相同的信息。 如果您有避免这种情况的想法...

谢谢

【问题讨论】:

    标签: core-data merge migration duplicates icloud


    【解决方案1】:

    等待合并完成(侦听 Core Data 通知)然后检查存储以查看数据是否已经存在。

    【讨论】:

      最近更新 更多