根据要求将应用数据与 iCloud 同步

Posted

技术标签:

【中文标题】根据要求将应用数据与 iCloud 同步【英文标题】:Sync app data with iCloud on request 【发布时间】:2013-01-14 12:19:52 【问题描述】:

我想将我的一些应用程序数据存储在 iCloud 中,并希望在应用程序进入后台或关闭时将其保存。

我有一个MyDocument类,是按照this Apple tutorial写的。事实上,我是这样做的:

// this function called from applicationDidEnterBackground
void SaveICloudData( const char *rawData )

    MyDocument *doc = AppDelegate.getICloudDocument;     // MyDocument is subclass of UIDocument, like in tutorial

    NSString *str = [[NSString alloc] initWithUTF8String:rawData];
    [doc setDocumentText:str];

我的应用程序进入后台,仅当我再次打开它时才会同步。但我想手动将我的数据与 iCloud 同步。我该怎么做?

【问题讨论】:

【参考方案1】:

在退出之前,UIDocument 检查文档是否为 hasUnsavedChanges。如果YES,则调用保存。 您正在 applicationDidEnterBackground 委托方法中设置文档文本,这可能为时已晚。

来自方法文档:

您应该执行与调整用户界面相关的任何任务 在此方法退出之前,但其他任务(例如保存状态)应该 根据需要移动到并发调度队列或辅助线程。 因为它可能是您开始的任何后台任务 applicationDidEnterBackground: 在该方法之后才会运行 退出,您应该在之前请求额外的后台执行时间 开始这些任务。换句话说,首先调用 beginBackgroundTaskWithExpirationHandler: 然后在一个任务上运行 调度队列或辅助线程。

【讨论】:

我可以从我的文档类中手动调用saveToUrl 方法吗? 是的,但首选的保存方式是让 UIDocument(或 Mac 上的 NSDocument)决定何时保存。您应该确保在应用程序进入后台之前更新文档的更改计数。 我使用了autosaveWithCompletitionHandler 函数。一切似乎都很好。谢谢!

以上是关于根据要求将应用数据与 iCloud 同步的主要内容,如果未能解决你的问题,请参考以下文章

将 Sqlite 数据库与 iCloud 同步?

防止 iCloud 同步数据(使用 .nosync?)

iCloud 同步 - 核心数据重复条目(绝望的帮助)

如何将 NSUserDefaults 数据与 iCloud 同步

将核心数据与 iCloud 同步 - 不包括实体

手动同步 iCloud