我正在展示一个没有任何按钮的UIAlertViewController,因为它应该只是通知用户正在上传.该应用程序应该将一些文件上传到Amazon S3(有些事情发生在并行线程上),我担心当我想关闭它时,对alert view控制器的引用会丢失.

你知道会出什么问题吗?

我有一个类级属性:var uploadInProgressAlert = UIAlertController()

我使用此代码在没有按钮的情况下显示alert (它可以工作):

self.uploadInProgressAlert = UIAlertController(title: "Uploading", message: "Please wait.", preferredStyle: .Alert)
self.presentViewController(self.uploadInProgressAlert, animated: true, completion: nil)

此代码用于解除alert (alert 不会被解除):

在这个帖子里:有iOS dismiss UIAlertController in response to event个人谈到了"持有参考资料".我不知道"保持参考"是什么意思,我认为这可能是问题的根源.

EDIT:我把上面的代码放在一个简单的测试应用程序中,它就在那里工作了.但是,当一些并行线程的情况变得复杂时,我无法找到一种方法来解除alert .

var delay4s = NSTimer()
var delay8s = NSTimer()
var alert = UIAlertController()

func showAlert() {
    if NSClassFromString("UIAlertController") != nil {
        alert = UIAlertController(title: "Uploading", message: "Please wait! \n\n", preferredStyle: UIAlertControllerStyle.Alert)
        self.presentViewController(alert, animated: true, completion: nil)
    }
}

func dismissAlert(){
    self.alert.dismissViewControllerAnimated(true, completion: nil)
}

override func viewDidLoad() {
    super.viewDidLoad()
    delay4s = NSTimer.scheduledTimerWithTimeInterval(4.0, target: self, selector: "showAlert", userInfo: nil, repeats: false)
    delay8s = NSTimer.scheduledTimerWithTimeInterval(8.0, target: self, selector: "dismissAlert", userInfo: nil, repeats: false)
}

推荐答案

通常情况下,父视图控制器负责解除模式显示的视图控制器(弹出窗口).在Objective-C中,可以在父视图控制器中执行以下操作:

[self dismissViewControllerAnimated:YES completion:nil];

Swift版本中的相同代码<;3将是:

self.dismissViewControllerAnimated(true, completion: nil)

Swift 3.0:

self.dismiss(animated: true, completion: nil)

Swift相关问答推荐

如何使用快速宏用来自函数的关联值来初始化枚举?

在SwiftUI中使用自定义图像填充列表行的正确方法

并发访问SWIFT中数组的非重叠子范围

在SwiftUI中,我如何确保带有符号的单词不会被拆分为两行?

在Swift中如何用变量计算0.9的立方

为什么即使 `C` 是一个不是 `Sendable` 的类,Task` 也能工作?

一组可散列的自定义元素插入相等的元素

swift 是否遇到 Java 的 2gb 最大序列化大小问题?

SwiftUI:调用以编程方式创建的视图的函数

如何从 LLDB 调用带有断点的 Swift 函数?

Xcode swift ui 错误KeyPathComparator仅在 macOS 12.0 或更高版本中可用

在视图中设置所有变量

Swift 2.0 方法不能标记为@objc,因为参数的类型不能在 Objective-C 中表示

在 Swift 中将两个字节的 UInt8 数组转换为 UInt16

不支持用作符合协议 AnyObject 的具体类型

Swift 覆盖实例变量

MKAnnotation Swift

Swift 中的 PageViewController 当前页面索引

协议扩展中的where self是什么

如何快速格式化用户显示(社交网络等)的时间间隔?