【发布时间】: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