@mechanicnikodimich

Как исправить ошибку при проверке значения в NSURLSession в SWIFT?

Подскажите пожалуйста, при обработке json в NSURLSession при определенном состоянии нужно вывести ошибку.
Делаю это через AlertController, но постоянно сыпется

Вот сам Alert

func dispayMyAlertMassage (userMessage : String)
    {
        var myAlert = UIAlertController(title: "Ошибка", message: userMessage, preferredStyle: UIAlertControllerStyle.Alert)
        
        let okAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: nil)
        
        myAlert.addAction(okAction)
        
        self.presentViewController(myAlert,animated: true, completion : nil)
    }


@IBAction func LoginButton(sender: AnyObject){
        
     
        // сохраняем имя пользователя
        let userName = nameText.text
        // сохраняем пароль пользователя
        let userPassword = PasswordText.text
        
        // ссылка на класс
        let myUrl = NSURL ( string: "http://localhost:8080/test1d/directURL?name="+userName+"&pass="+userPassword);        
        let request = NSMutableURLRequest(URL: myUrl);
        request.HTTPMethod = "GET"; 
        if userName.isEmpty & userPassword.isEmpty
        {
            self.dispayMyAlertMassage ("Введите данные пользователя!");
        }
        
        else
        
        {
            
            let task = NSURLSession.sharedSession().dataTaskWithRequest(request)
                {
                    data,response,error in
                    
                    if error != nil {
                        println("error=\(error)")
                    }
                    
                    
                    var err: NSError?
                    var json = NSJSONSerialization.JSONObjectWithData (data, options: .MutableContainers, error: &err) as NSDictionary
                    
                    let parseJSON = json["ID"] as? NSInteger
                    
                    
                    println("parse id:\(parseJSON )")
                    
                    
                    if parseJSON != -1
                    {
                        //auth successesfull
                        NSUserDefaults.standardUserDefaults().setBool(true, forKey:"isUserLoggedIn");
                        NSUserDefaults.standardUserDefaults().synchronize();
                        self.dismissViewControllerAnimated(true, completion: nil)
                    }
                    else
                    {
                  self.dispayMyAlertMassage ("Введите данные пользователя!");  -- тут система ломается
                    }
            }
            task.resume()
        }


вот текст ошибки:

2015-08-03 17:11:01.440 VinciMobile[5879:423254] *** Assertion failure in -[UIKeyboardTaskQueue waitUntilAllTasksAreFinished], /SourceCache/UIKit_Sim/UIKit-3318/Keyboard/UIKeyboardTaskQueue.m:374
2015-08-03 17:11:01.444 VinciMobile[5879:423254] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIKeyboardTaskQueue waitUntilAllTasksAreFinished] may only be called from the main thread.'


Империческим путем было выявлено, что ломает все именно эта строка
self.presentViewController(myAlert,animated: true, completion : nil)


Помогите понять, в чем заблуждения?
  • Вопрос задан
  • 302 просмотра
Решения вопроса 1
@mechanicnikodimich Автор вопроса
Сам себе режисер.
Вот так правильно.
dispatch_async(dispatch_get_main_queue(), {
                        self.dispayMyAlertMassage ("Неверные регистрационные данные");
                        });
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы