Я представляю UIAlertViewController без каких-либо кнопок, так как он должен просто информировать пользователей о том, что загрузка выполняется. Предполагается, что приложение загрузит некоторые файлы в Amazon S3 (некоторые вещи происходят в параллельных потоках), и я боюсь, что ссылка на контроллер представления предупреждений будет потеряна, когда я захочу ее отклонить.
Любая идея о том, что может быть неправильным? Я даже не знаю, как отлаживать это, поскольку в области Debug нет ошибки?
У меня есть свойство уровня класса: var uploadInProgressAlert = UIAlertController()
Я использую этот код для представления моего предупреждения без кнопок (он работает):
self.uploadInProgressAlert = UIAlertController(title: "Uploading", message: "Please wait.", preferredStyle: .Alert)
self.presentViewController(self.uploadInProgressAlert, animated: true, completion: nil)
Этот код предназначен для отклонения предупреждения (предупреждение не отклоняется): self.uploadInProgressAlert.dismissViewControllerAnimated(false, completion: nil)
В этой теме: iOS отклоняет UIAlertController в ответ на событие, которое кто-то говорил о "проведении ссылки". Я не знаю, что значит "держать ссылку", и я думаю, что это может быть причиной проблемы.
EDIT: я поставил вышеуказанный код в простое тестовое приложение и там он работает. Но когда ситуация осложняется некоторыми параллельными потоками, я не могу найти способ отклонить предупреждение.
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)
}