Ios 如何检查FileManager.default.setImpublication()的结果
我正在用Swift制作一个基于文档的iOS应用程序,它使用Ios 如何检查FileManager.default.setImpublication()的结果,ios,swift,multithreading,cocoa,Ios,Swift,Multithreading,Cocoa,我正在用Swift制作一个基于文档的iOS应用程序,它使用FileManager.default.setUbious()将文件保存到应用程序的iCloud驱动器文件夹中。现在,我找不到一种方法来确定setUbiouse何时成功运行(正如我在文章中提到的) 我查阅了苹果公司的文档,它说Objective-C版本的setousibility()返回了一个Bool,而 在Swift中,此方法返回Void并用抛出标记 关键字,指示在失败时抛出错误 我想知道此函数何时成功运行,以便我可以运行其他代码来说明
FileManager.default.setUbious()
将文件保存到应用程序的iCloud驱动器文件夹中。现在,我找不到一种方法来确定setUbiouse
何时成功运行(正如我在文章中提到的)
我查阅了苹果公司的文档,它说Objective-C版本的setousibility()
返回了一个Bool
,而
在Swift中,此方法返回Void并用抛出标记
关键字,指示在失败时抛出错误
我想知道此函数何时成功运行,以便我可以运行其他代码来说明上载的文档-我找到的最接近的方法是在函数的描述中,其中说明:
使用分派队列从后台线程调用此方法。之后
该方法返回消息,通知主线程更新其余的
你的应用程序的数据结构
问题是,我不知道“发送主线程消息以更新应用程序的其余数据结构”是什么意思。在此方面的任何帮助都将不胜感激
编辑:在进一步研究之后,我认为我的主要问题是它说“在方法返回后…”。如果该方法只返回“Void”,我怎么能等到它返回后再更新其余的数据结构呢?这里是一般的想法:
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)
}
}
在文件加载完成之前,仍然会运行“reportResult()”函数。有没有办法在后台线程上暂停函数,直到文件保存为止?@Grant Odd,我认为
setousible
是一个同步函数。