2017-01-10 10 views
0

In der Zielseite habe ich eine Schließung verwendet, um die API-Antwort von einer Hilfsklasse zu erhalten. Sobald ich die Antwort erhalten habe, navigiere ich zu einer anderen Seite. Das Steuerelement führt die pushViewController-Zeile aus, es dauert jedoch sehr lange, um zu navigieren. Liegt es an der Schließung? wie kann ich es reparieren?ViewController nach langer Verzögerung geschoben, wenn in eine Schließung geschoben

class LandingView: UIViewController 
{  
override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
    getStaticCountryAndStateList() 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

// MARK: - Navigation 
func getStaticCountryAndStateList() 
{ 
    WebAPIHelper.getMethod(methodName: "/Common/GetStaticCountryAndStateList", success: {(response)->Void in 

let signInObj = SignIn(nibName: (UIDevice.current.userInterfaceIdiom == .pad ? "SignIn" : "SignIn_iPhone"), bundle: nil) 
      DispatchQueue.main.async 
       { 
        self.navigationController?.pushViewController(signInObj, animated: true) 
      } 


    }, Failure: { 
     (error)->Void in 
     print("Error \(error)") 
    }) 
} 
} 
+1

Die Antwort von Ihrer API dauert wahrscheinlich zu lange ... Deshalb ist der Viewcontroller nach einer langen Verzögerung Pusher. –

Antwort

0

Führen Sie immer im Hauptthread für UI-bezogene Sachen.

dispatch_async(dispatch_get_main_queue(), ^{ 
     //update UI 
}); 

Swift 3

DispatchQueue.main.async { 
     // update ui 
    } 
+0

DispatchQueue.main.async {} funktioniert gut im Simulator, aber es macht keinen Unterschied in der realen Gerät, d. H. IPad oder iPhone. – Mano

+0

@Mano, was meinst du hier **, aber es macht keinen Unterschied in der realen Gerät ** –

1
To push view controller fast in closure, you must access main queue. 
Below is code for accessing main queue in swift. 

func getStaticCountryAndStateList() 
{ 
    WebAPIHelper.getMethod(methodName: "/Common/GetStaticCountryAndStateList", success: {(response)->Void in 

DispatchQueue.main.async { 

let signInObj = Payer(nibName: (UIDevice.current.userInterfaceIdiom == .pad ? "Payer" : "Payer_iPhone"), bundle: nil) 
      self.navigationController?.pushViewController(signInObj, animated: true) 
} 

    }, Failure: { 
     (error)->Void in 
     print("Error \(error)") 
    }) 
} 
} 
+0

DispatchQueue.main.async {} funktioniert gut im Simulator, aber es macht keinen Unterschied in der realen Gerät dh iPad oder iPhone. – Mano

0

Drücken Sie den Blick auf den Haupt-Thread nicht auf dem gleichen Thread wie Ihr Web-Anfrage.

+0

Können Sie mir eine Codebeispiel für das, was Sie meinen – Mano

Verwandte Themen