Alert не из главного потока (crash)


#1

При отправке post-запроса на сервер и вызове alert об успешном создании события, получаю ошибку:

"Assertion failure in -[UIKeyboardTaskQueue waitUntilAllTasksAreFinished], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.5.2/Keyboard/UIKeyboardTaskQueue.m:432
2016-11-30 15:55:14.158 SCA[10071:106324] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIKeyboardTaskQueue waitUntilAllTasksAreFinished] may only be called from the main thread.'"

в этом куске кода:

  func createEventPOSTRequest() {
   
    let sgroundData = sportPlaceArray[index]
    
    let params = ["sg_id":"\(self.sportPlaceArray[index].id!)",
                  "name":"\(self.eventName!)",
                  "time":"\(self.dateTimeForRequest!)",//2016-10-30T21:00:00.000Z
                  "user":"\(self.mainUserID!)"] as [String : Any]

    do {
      let opt = try HTTP.POST(hostName + "/events/newEvent", parameters: params)
      opt.start { response in
        
        if response.statusCode == 200 {
          
            //FIXME: Здесь ошибка - вызывается не в основном потоке
            self.showAlert(title: "Вы успешно создали событие", message: "\(self.eventName!)\n\(sgroundData.address!)\n\(self.dateTime!)")// здесь падает
           
        } else {
          self.showAlert(title: "Ошибка", message: "Что-то пошло не так.\nПопробуйте создать событие немного позже.")
          return
        }
      }
    } catch let error {
      self.showAlert(title: "Ошибка", message: "Что-то пошло не так\nПроверьте соединение с сетью Интернет!")
      print("Got an error creating the request: \(error)")
    }
  }

Как можно решить проблему?
P.S. Читал на http://stackoverflow.com/questions/39559751/uikeyboardtaskqueue-may-only-be-called-from-the-main-thread, пока сложно для понимания.


#2

Главный тезис - все изменения UI нужно проводить в UI (т.е. главном) queue

    DispatchQueue.main.async {
        self.showAlert(title: "Ошибка", message: "Что-то пошло не так.\nПопробуйте создать событие немного позже.")
    }

#3

Большое спасибо, помогло!


#4

Почитайте на хабре про GCD на swifte 3, статья большая но рекомендую освоить. Так же если совсем трудно будет для понимания пиши в ЛС поделись материалом