如何检查FileManager.default.setUbiquitous()的结果

时间:2017-05-24 00:19:59

标签: ios swift multithreading cocoa

我在Swift中制作基于文档的iOS应用程序,它使用FileManager.default.setUbiquitous()将文件保存到应用程序的iCloud Drive文件夹中。现在,我找不到确定setUbiquitous成功运行的方法(正如我在this帖子中提到的那样)。

我正在阅读Apple的文档,并说它setUbiquitous()的Objective-C版本返回Bool,而

  

在Swift中,此方法返回Void并标记为throws   表示在失败的情况下抛出错误的关键字。

我想知道这个函数何时成功运行,以便我可以运行其他代码来考虑上传的文档 - 我发现最接近的方法是在函数的描述中,其中说:

  

使用调度队列从后台线程调用此方法。后   该方法返回,消息您的主线程更新其余的   你的应用程序的数据结构。

问题是,我不知道它的含义是什么,并通过消息传递主线程来更新应用程序的其他数据结构"。任何有关这方面的帮助将非常感激!

编辑:在进一步研究之后,我认为我的主要问题是在方法返回后#34;"。如果该方法仅返回' Void',我怎么能等到它返回更新其余的数据结构?

1 个答案:

答案 0 :(得分:1)

这是一般的想法:

DispatchQueue.global(qos: .background).async {
    // This will run on a background Thread

    let succeeded: Bool
    try {
        FileManager.default.setUbiquitous( ... )
        succeeded = true
    }
    catch {
        // handle error
        succeeded = false
    }

    DispatchQueue.main.async {
        // This will run back on the main thread
        reportResult(succeeded)
    }
}