【问题标题】:Sync app data with iCloud on request根据要求将应用数据与 iCloud 同步
【发布时间】: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 同步。我该怎么做?

【问题讨论】:

    标签: ios objective-c icloud


    【解决方案1】:

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

    来自方法文档:

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

    【讨论】:

    • 我可以从我的文档类中手动调用saveToUrl 方法吗?
    • 是的,但首选的保存方式是让 UIDocument(或 Mac 上的 NSDocument)决定何时保存。您应该确保在应用程序进入后台之前更新文档的更改计数。
    • 我使用了autosaveWithCompletitionHandler 函数。一切似乎都很好。谢谢!
    猜你喜欢
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 2012-03-02
    • 2012-01-21
    • 2016-07-23
    • 1970-01-01
    相关资源
    最近更新 更多