0

с window.rootViewController переход между двумя точками зрения займет около 1 мин

У меня есть подключение к моему серверу, когда возвращение является успехом, я изменить свою rootViewControler, но это занимать очень много времени. если я перескажу код для подключения, представление появится немедленно?быстрый переход между двумя точками зрений занимает очень много времени

self.logingSpinner.startAnimating(); 

    var request = NSMutableURLRequest(URL: NSURL(string: "http://apps/appsAuth")!) 
    var session = NSURLSession.sharedSession() 
    request.HTTPMethod = "POST" 
    var err: NSError? 

    var bodyData="siren=\(entrepriseId.text)&email=\(email.text)&pwd=\(pwd.text)"; 

    request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding); 

    request.HTTPMethod = "POST" 
    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 

    var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in 

     var strData = NSString(data: data, encoding: NSUTF8StringEncoding) 

     var err: NSError? 
     var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error: &err) as? NSDictionary 


     if(err != nil) { 
      println(err!.localizedDescription) 
      let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding) 
      println("Error could not parse JSON: '\(jsonStr)'") 
     } 
     else { 

      if let parseJSON = json { 
       println("data retour \(parseJSON)") 

       var success = parseJSON["error"] as? Int 
       println("Succes: \(success)") 


       dispatch_async(dispatch_get_main_queue()) { 
        self.logingSpinner.stopAnimating(); 
        bt.enabled = true; 
        bt.alpha = 1; 
       } 

       // si une erreur symfony est retournée 
       if(success==nil){ success = 3}; 

       switch success!{ 
        case 0: 
         println("auth success"); 
         var data = userDefault.dictionaryForKey("userInfos")! 
         data["login"] = self.email.text; 
         data["siren"] = self.entrepriseId.text; 
         data["pwd"] = self.pwd.text; 
         data["isLogged"] = true; 
         data["hasCredential"] = true; 

         userDefault.setObject(data, forKey : "userInfos"); 
         userDefault.synchronize(); 
//CHANGE root View Controller 
         let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
         let initViewController: UIViewController = storyBoard.instantiateViewControllerWithIdentifier("viewAcc") as accueilViewController 
         var window :UIWindow = UIApplication.sharedApplication().keyWindow! 
         window.rootViewController = initViewController 
         window.makeKeyAndVisible() 


        case 1 : 
         println("auth failed") 
        default : 
         println("default"); 
       } 


      } 
      else { 
       // Woa, okay the json object was nil, something went worng. Maybe the server isn't running? 
       let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding) 
       println("Error could not parse JSON: \(jsonStr)") 
      } 



     } 
    }) 

    task.resume() 

Я попытался с presentViewControler переход immediat, но мое изображение внутри вида disapear, только кнопка на месте?
спасибо заранее за помощь

+0

никто помочь в этом? я застрял, я не знаю, почему с NSURLSession вид кажется запоздалым, некоторые процедуры должны хранить память, но в отладчике я не вижу большого потребления памяти, а сеть выпускает нормально. Я думаю, что это интернат для ios, но почему ???? – user2718075

ответ

1

Решенный

Да! после долгой ночи я должен найти, почему мой взгляд слишком много времени, чтобы появиться после того, как была выполнена wiewdidload.

это о Тре ad и NSUrlSession, с NSUrlSession обратный вызов находится в фоновом потоке, и, как и я, я обрабатываю rootview внутри, представление не обрабатывается в основном потоке, оно должно быть (apple recommandation on user interface) !!!!
, чтобы решить эту проблему, я просто вернул выполнение этого кода в основном потоке. в моем completionHandler я сделать это

var task = self.session.dataTaskWithRequest(self.request, completionHandler: {data, response, error -> Void in 

     dispatch_async(dispatch_get_main_queue(),{ 

       mycallback(resultat: "success") 

      }) 
}) 

функция mycallback ручка RootViewController
работа в большой .....

0

NSURLSession ответствено замедлить вид перехода

Я еще не нашел, почему! но он виноват. это странно, потому что функция завершения идет в конце. кто-то знает, что после выполнения функции func процесс выполняется.
извините за мой очень плохой английский :-(

let initViewController: UIViewController = storyBoard.instantiateViewControllerWithIdentifier("viewAcc") as accueilViewController 
       var window :UIWindow = UIApplication.sharedApplication().keyWindow! 
window.rootViewController = initViewController 
window.makeKeyAndVisible() 
println("end") 

в консоли Println («конец») является выполнение, я вижу Println (viewdidload) из моей accueilviewcontroller функции viewDidAppear, в консоли, но вид появляются после более чем за одну минуту.

 Смежные вопросы

  • Нет связанных вопросов^_^