2017-02-01 6 views
0

UIAlertControllers не выполняются или не отображаются. Если я только пишу инструкцию печати, то в консоли есть вывод, но теперь также не выполняются операторы печати (если я пишу их вместе с UIAlertControllers, как в коде, который я написал ниже).Хотите использовать UIAlertController внутри ответного блока AlamofireJSON

Alamofire.request(some_url, method: .post, parameters: data, encoding: URLEncoding.default, headers: nil).responseJSON{ 
       response in 

       let json = JSON(response.result.value) 

       print(json) 
       self.eventid = json[0]["EventRegID"].stringValue 

       if !json[0]["AuthKeyError"].exists(){ 
        if !json[0]["ExceptionOccured"].exists(){ 
         if !json[0]["RegistrationFailed"].exists() { 
          if !json[0]["EventInHold"].exists() { 
           if json[0]["RegistrationSuccess"].exists() { 
            let alertController = UIAlertController(title: "", message: json[0]["RegistrationSuccess"].stringValue, preferredStyle: .alert) 
            let no1Action = UIAlertAction(title: "OK", style: .default) { (action) -> Void in 
             print("The user has registered successfully") 
            } 
            alertController.addAction(no1Action) 
           } 
           else{ 

           } 
          } 
          else { 
           let alertController = UIAlertController(title: "", message: "Event is on hold.", preferredStyle: .alert) 
           let no2Action = UIAlertAction(title: "OK", style: .default) { (action) -> Void in 
            print("The event is on hold.") 
           } 
           let yes2Action = UIAlertAction(title: "GO", style: .default) { (action) -> Void in 
            self.performSegue(withIdentifier: "bullshit", sender: self) 
           } 
           alertController.addAction(no2Action) 
           alertController.addAction(yes2Action) 
          } 
         } 
         else { 
          print("Registration failed due to connection issues. Please login.") 
          let alertController = UIAlertController(title: "", message: "Registration failed", preferredStyle: .alert) 
          let no3Action = UIAlertAction(title: "OK", style: .default) { (action) -> Void in 
           print("The registration failed") 
          } 
          alertController.addAction(no3Action) 
         } 
        } 
        else { 
         print("There's some problem with the database") 
         let alertController = UIAlertController(title: "", message: "Some problem with the server", preferredStyle: .alert) 
         let no4Action = UIAlertAction(title: "OK", style: .default) { (action) -> Void in 
          print("The user has registered successfully") 
         } 
         alertController.addAction(no4Action) 
        } 
       } 
       else { 
        print("AuthKeyError") 
        let alertController = UIAlertController(title: "", message: "Auth key error", preferredStyle: .alert) 
        let no5Action = UIAlertAction(title: "OK", style: .default) { (action) -> Void in 
         print("AAUTH KEY ERROR") 
        } 
        alertController.addAction(no5Action) 
       } 
      } 

     } 
     else { 
      print("not ok") 

     } 



    } 
+1

Где вы предъявившему оповещения контроллер? Я не вижу никаких заявлений. – Samantha

+0

многие утверждения 'if-else' выглядят не очень красиво - вы должны улучшить его. например, вы можете использовать корпус переключателя. например, с ответом [обработка цепочки] (https://github.com/Alamofire/Alamofire#chained-response-handlers). можете ли вы опубликовать примеры (один или два) вашей ошибки JSON – muescha

+0

, вы можете использовать для этого проверку ответа. doc и примеры [здесь] (https://github.com/Alamofire/Alamofire#response-validation) и [здесь] (https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%204.0% 20Migration% 20Guide.md # response-validation) – muescha

ответ

0

вам нужно представить alertcontroller после addAction

presentViewController(alertController, animated: true, completion: nil) 

может быть, вы должны представить его в новой операции

OperationQueue.main.addOperation { 
    presentViewController(alertController, animated: true, completion: nil) 
} 
+0

Иногда я действительно думаю, что многопоточность является злой, а быстрый с ее легкими замыканиями делает ее еще хуже. На мой взгляд, это двадцатый вопрос на этой неделе, который имеет аналогичное решение, например ваше. кто-то хочет что-то сделать в пользовательском интерфейсе из не-основного потока :-) –

+0

Спасибо @Retterdesdialogs за код и предложения, он решил мою проблему. –

+0

@AndreasOetjen Вы абсолютно правы. Я только что упомянул об этом, потому что, возможно, он захочет перейти на другой контроллер после запроса. Также я не вижу никаких протоколов делегатов, и реализация не выглядит такой профессиональной, поэтому, возможно, он застрянет, потому что основной поток заблокирован по какой-то причине. – Retterdesdialogs