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 和现有的“鞋盒”应用核心数据存储的主要内容,如果未能解决你的问题,请参考以下文章