Несколько предупреждений друг над другом в быстром - PullRequest
0 голосов
/ 01 мая 2018

Прямо сейчас я получаю ошибку: Предупреждение: Попытка представить UIAlertController: 0x7f9af9016200 на CollectionViewController: 0x7f9af750d620, который уже представляет (null)

Есть ли способ складывать оповещения в swift? Вот мой код, он показывает предупреждение, если элемент был опубликован более дня назад. Два способа я пытался сделать это, но безуспешно.

  1. Пауза для цикла пока я не нажму да или нет.
  2. Представлять много предупреждений друг над другом

Какие-нибудь решения, как это сделать?

for p in json! {
     if self.checkDaysPassed(postDate: p["uploadedTime"] as! String) > 1 {
     print("more than one day passed, sell item?")

     let alert = UIAlertController(title: "Sell this item", message: "This item has been unused for a day", preferredStyle: .alert)
     alert.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
     alert.addAction(UIAlertAction(title: "Yes", style: .default){ (action) in
           print("pressed yes")
     })
     alert.addAction(UIAlertAction(title: "No", style: .cancel){ (action) in
          print("pressed no")
     })
     self.present(alert, animated: true)
    }
}

1 Ответ

0 голосов
/ 01 мая 2018

Чтобы показывать оповещения друг за другом, я бы предложил добавить этот рекурсивный код,

Добавьте переменную class для messages и заполните array для всех условий true. После этого вам нужно просто вызвать метод showAlert, который будет обрабатывать показ всех сообщений одно за другим.

class YourClass {

   var messages: [String] = []


   func yourMethod() {
       for p in json! {
         if self.checkDaysPassed(postDate: p["uploadedTime"] as! String) > 1 {
             messages.append("This item has been unused for a day")
         }
       }
       self.showAlert()
   }

   private func showAlert() {
        guard self.messages.count > 0 else { return }

        let message = self.messages.first

        func removeAndShowNextMessage() {
            self.messages.removeFirst()
            self.showAlert()
        }

        let alert = UIAlertController(title: "Sell this item", message: message, preferredStyle: .alert)
        alert.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
        alert.addAction(UIAlertAction(title: "Yes", style: .default){ (action) in
            print("pressed yes")
            removeAndShowNextMessage()

        })
        alert.addAction(UIAlertAction(title: "No", style: .cancel){ (action) in
            print("pressed no")
            removeAndShowNextMessage()
        })

        UIApplication.shared.delegate?.window??.rootViewController?.present(alert, animated: true)
    }
}
...