iCloud和现有的核心数据存储“鞋盒”应用程序

时间:2012-01-29 06:44:49

标签: core-data icloud

我有一个包含单个Core Data商店的现有应用。它类似于Apple所说的鞋盒应用程序。 已存储了许多记录。我能够轻松添加必要的代码以获得iCloud集成设置。

我在iPod touch和iPad上构建了新的应用程序,两者都运行iOS5。

iPod拥有现有数据。但是数据没有出现在iPad上。 该应用程序已启用iTunes文件共享,因此通过iTunes我删除了两个设备上的sqlite数据库。

现在我尝试进行更改,看看iCloud现在是否会保持同步状态。它没有。

如何在两台设备上获取现有数据,然后让iCloud从那时起保持同步。


    NSFileManager *fileManager = [NSFileManager defaultManager];

NSURL *cloudURL = [fileManager URLForUbiquityContainerIdentifier:@"ABCD1234.com.yourcompany.appID"];

NSDictionary *options = nil;

if (nil != cloudURL) {

    NSString *coreDataCloudContent = [[cloudURL path] stringByAppendingPathComponent:@"data"];
    cloudURL = [NSURL fileURLWithPath:coreDataCloudContent];

    options = [NSDictionary dictionaryWithObjectsAndKeys:
               [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
               [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, 
               @"myApp.store", NSPersistentStoreUbiquitousContentNameKey,
               cloudURL, NSPersistentStoreUbiquitousContentURLKey,
               nil];
}
else {

    options = [NSDictionary dictionaryWithObjectsAndKeys:
               [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
               [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, 
               nil];
}

我已将此添加到managedObjectContext中以进行通知:

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(mergeChangesFrom_iCloud:) name:NSPersistentStoreDidImportUbiquitousContentChangesNotification object:coordinator];

有数千人使用我的应用程序并输入了大量数据。他们不想再次进入。我想提供启用了iCloud的这个新版本的应用程序,但是直到我能够将数据显示在两者上并保持同步,这是没有意义的。

1 个答案:

答案 0 :(得分:0)

良好的睡眠总能帮助你。

注意,我已经通过iTunes文件共享备份了我的主设备中的SQLite数据库。

我启用了iTunes文件共享。我在每台设备上构建应用程序并在XCode中运行。停止每个设备。转到iTunes。通过文件共享我删除每个设备上的sqlite数据库。同步设备。然后我选择一个设备并使用iTunes文件共享将我备份的数据库恢复到它上面。同步设备。

使用恢复的数据库在设备上启动我的应用。然后我在没有db的第二个设备上启动我的应用程序(请记住,上面删除它)。等了一会儿,然后看到数据确实出现了。我想我听到了天使合唱团的微弱声音。