gpt4 book ai didi

iOS Swift - 调度组,异步调度

转载 作者:行者123 更新时间:2023-11-30 12:31:20 25 4
gpt4 key购买 nike

我有一个 View Controller ,其中有几个文本字段和 4 个按钮(代表 4 张照片),用户将单击这些照片来选择要上传到服务器的照片,以及一个“保存”按钮。选择照片后,我使用dispatch_async将照片上传到服务器并获取返回的URL,并使用该URL和文本字段中的其他信息来调用另一个API,并在用户单击“保存”按钮时将所有内容上传到服务器。

对于这种情况:如果我单击“保存”按钮,但照片尚未上传到服务器,我可以使用 DispatchGroup 来通知所有照片何时上传,并且我可以在等待时显示进度平视显示器,当完成时,我'将调用另一个API将所有数据提交到服务器并弹出当前 View Controller 。

但是我有一个要求,当用户单击“保存”按钮时,必须立即弹出 View Controller ,并且所有这些 API 调用都应该在后台运行。我能想到的解决方案是,当用户单击“保存”按钮时,我会将所有文本字段信息保存到数据库(核心数据或用户默认值)。因为我使用 PhotoUploading 单例类将照片上传到服务器,所以当服务器返回照片的 URL 时,我将使用该单例将这些 URL 保存到数据库,并调用 API 方法将所有数据提交到服务器。但通过这样做,我必须为 PhotoUploading 类添加不相关的作品。

有没有更好的方法可以使用 GCD 和队列而不使用数据库来做到这一点?我想要归档的是使用 GCD 在后台处理此 View Controller 中的所有内容。比如等待上传任务完成,然后在不阻塞 UI 的情况下执行此任务

最佳答案

您要求的是执行 UIViewController 中的所有任务,即使在关闭它之后也是如此。这可以通过不取消初始化 UIViewController 来实现。以下是 swift 中的示例。

var viewController: ViewController?

func launchVC() {

viewController = ViewController()
self.present(viewController!, animated: true, completion: nil)
}

func dismissVC() {

if let view_controller = self.viewController {
view_controller.dismiss(animated: true, completion: nil)
}
}

func killVC() {

viewController = nil
}

正如您在上面所看到的,即使在解除 ViewController 之后,ViewController 仍然存在。因此,您在特定 ViewController 的后台线程中启动的任何任务都将完成。完成后,您可以销毁 ViewController 对象。

您无需使用任何外部 Singleton 类即可完成此操作。

如果您正在寻找其他内容或者对当前解决方案有任何疑问,请告诉我

关于iOS Swift - 调度组,异步调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43515494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com