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

Posted

技术标签:

【中文标题】iCloud 和现有的“鞋盒”应用核心数据存储【英文标题】:iCloud and existing Core Data store for "shoe box" app 【发布时间】:2012-01-29 06:44:49 【问题描述】:

我有一个具有单个核心数据存储的现有应用程序。它类似于 Apple 所说的鞋盒应用程序。 已经存储了许多记录。我能够轻松添加必要的代码来进行 iCloud 集成设置。

我在运行 ios5 的 iPod touch 和 iPad 上构建了新应用程序。

iPod 有现有数据。但是数据不会显示在 iPad 上。 该应用程序启用了 iTunes 文件共享,因此我通过 iTunes 将 sqlite db 放在两台设备上。

现在我尝试进行更改,看看 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 的应用程序的新版本,但是直到我可以让数据显示在两者上并保持同步之前,这是没有意义的。

【问题讨论】:

“我能够轻松添加必要的代码来设置 iCloud 集成”——也许它没有你想象的那么容易;)。您将需要包含一些 iCloud 代码和一些关于您的数据存储如何工作的描述。 【参考方案1】:

睡个好觉总是有帮助的。

注意,我已经通过 iTunes 文件共享从我的主设备获取了我的 SQLite DB 的备份。

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

在具有恢复的数据库的设备上启动我的应用程序。然后我在没有数据库的第二台设备上启动我的应用程序(记住,上面删除了它)。等了一会,果然,数据出来了。我想我听到了天使合唱团唱歌的微弱声音。

【讨论】:

以上是关于iCloud 和现有的“鞋盒”应用核心数据存储的主要内容,如果未能解决你的问题,请参考以下文章

使用 iCloud 进行核心数据同步

核心数据 - iCloud 行为

核心数据迁移到 iCloud

IOS - iCloud中的核心数据备份

核心数据+iCloud:iCloud Storage只增不减

如何将现有核心数据 iOS 7 应用程序的数据迁移到 iCloud?