2016-06-20 3 views
0

Здравствуйте, я использую appdeligate для определенного метода, например, входа в приложения и выхода из приложения. Вот у меня есть код , который в настоящее время делает работает большой, но проблема в том, когда запрос Войти отправить на сервер, то вид вертушка не работаетspinnerView не работает в appdelegate

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    // Override point for customization after application launch. 
    spinnerInitialization(); 
    email = NSUserDefaults.standardUserDefaults().stringForKey("email")\\Getting Email from local storage 
    password = NSUserDefaults.standardUserDefaults().stringForKey("password")\\\\Getting Password from local storage 
    if ((email == nil) && (password == nil)){ 

    } 
    else if ((email == "") && (password == "")) { 

    } 
    else { 
     loginRequest(email!, password: password!) 
    } 

    return true 

} 

Здесь Далее идет Логин Функция

func loginRequest(var email: String,password: String){ 

    let request = NSMutableURLRequest(URL: NSURL(string: "www.example.com/login")!) 
    request.HTTPMethod = "POST" 
    let postString = "email=\(email)&password=\(password)&token=\("ttttttt")" 

    dispatch_async(dispatch_get_main_queue()) { 
     self.startSpinner() 
    } 

    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) 
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request){ 
     data, response, error in 
     if(error != nil){ 

      let nsError = error! as NSError 
      let dialog = UIAlertController(title: "Internal Server Error?", message: nsError.localizedDescription, preferredStyle: UIAlertControllerStyle.Alert); 

      let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default){(ACTION) in 

       print("Ok Button Action ") 
      } 

      dialog.addAction(okAction); 

      dispatch_async(dispatch_get_main_queue(), { 
       //Code that presents or dismisses a view controller here 
       self.window?.rootViewController?.presentViewController(dialog, animated: true, completion: nil) 
      }) 
     } 

     else{ 
     do { 
      let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) 

      let status = json["status"]as? Int 
      let message = json["message"]as? String 

      if(status == 0){ 


       let dialog = UIAlertController(title: "Login Unsuccessful?", message: message, preferredStyle: UIAlertControllerStyle.Alert); 

       let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default){(ACTION) in 

        print("Ok Button Action ") 
       } 

       dialog.addAction(okAction); 

       dispatch_async(dispatch_get_main_queue(), { 

        self.window?.rootViewController?.presentViewController(dialog, animated: true, completion: nil) 

       }) 


      } 
      else 
      { 
       let newModel = UserDetails() 
       let result = json["data"] 
       let userId = result!!["id"] as? String 
       let companyId = result!!["companyId"] as? String 
       let name = result!!["name"] as? String 
       let companyName = result!!["companyName"] as? String 
       email = (result!!["email"] as? String)! 
       let userType = result!!["userType"] as? String 

       NSUserDefaults.standardUserDefaults().setObject(email, forKey: "email") 
       NSUserDefaults.standardUserDefaults().setObject(userId, forKey: "userId") 
       NSUserDefaults.standardUserDefaults().setObject(companyId, forKey: "companyId") 
       NSUserDefaults.standardUserDefaults().setObject(name, forKey: "name") 
       NSUserDefaults.standardUserDefaults().setObject(companyName, forKey: "companyName") 
       NSUserDefaults.standardUserDefaults().setObject(userType, forKey: "userType") 
       NSUserDefaults.standardUserDefaults().setObject(password, forKey: "password") 
       NSUserDefaults.standardUserDefaults().setObject("afdg2015", forKey: "token") 

       newModel.userId = userId! 
       newModel.companyId = companyId! 
       newModel.userName = name! 
       newModel.companyName = companyName! 

       if userType == "0"{ 
        newModel.asEmployeer = true 
        NSUserDefaults.standardUserDefaults().setObject("true", forKey: "asEmployeer") 
        NSNotificationCenter.defaultCenter().postNotificationName("load", object: nil) 
       } 
       else { 
        newModel.asEmployeer = false 
        NSUserDefaults.standardUserDefaults().setObject("false", forKey: "asEmployeer") 
        NSNotificationCenter.defaultCenter().postNotificationName("load", object: nil) 
       } 

       self.userDetails.append(newModel) 

       dispatch_async(dispatch_get_main_queue()) { 

        let storyboard = UIStoryboard(name: "Main", bundle: nil) 
        var scheduleController = storyboard.instantiateViewControllerWithIdentifier("scheduleHome100") 
        if (newModel.asEmployeer == false){ 
        //EmployeeScheduleViewController 
         scheduleController = storyboard.instantiateViewControllerWithIdentifier("EmployeeScheduleViewController") 
        } 

        let drawerViewController = storyboard.instantiateViewControllerWithIdentifier("DrawerViewController") 

        let leftSideNav = UINavigationController(rootViewController: drawerViewController) 
        let centerNav = UINavigationController(rootViewController: scheduleController) 

        self.centerContainer = MMDrawerController(centerViewController: centerNav, leftDrawerViewController: leftSideNav) 
        self.centerContainer!.openDrawerGestureModeMask = MMOpenDrawerGestureMode.PanningCenterView; 
        self.centerContainer!.closeDrawerGestureModeMask = MMCloseDrawerGestureMode.PanningCenterView; 

        self.window!.rootViewController = self.centerContainer 
        self.window!.makeKeyAndVisible() 
       } 
      } 

     } catch { 
      print("error serializing JSON: \(error)") 
     } 
      dispatch_async(dispatch_get_main_queue(), { 
       self.stopSpinner() 
      }) 
     } 
    } 

    task.resume(); 
} 

Рядом с этим здесь блесны функционируют

func startSpinner(){ 
    print("In startSpinner Function") 
    view.addSubview(spinnerView) 
} 

func stopSpinner(){ 
    print("In stopSpinner Function") 
    let subViews = view.subviews 
    for subView in subViews{ 
     if subView.tag == 1000{ 
      subView.removeFromSuperview() 
     } 

    } 
} 

func spinnerInitialization(){ 
    print("In spinnerInitialization Function") 
    spinnerView = UIView(frame: CGRect(x:0, y:0,width: 250,height: 50)) 
    spinnerView.backgroundColor = UIColor.blackColor() 
    spinnerView.layer.cornerRadius = 10 
    let wait = UIActivityIndicatorView(frame: CGRect(x:0,y: 0,width: 50,height: 50)) 
    wait.color = UIColor.whiteColor() 
    wait.hidesWhenStopped = false 
    wait.startAnimating() 
    let text = UILabel(frame: CGRect(x:60,y:0,width:200,height: 50)) 
    text.textColor = UIColor.whiteColor() 
    text.text = "Please wait..." 
    spinnerView.addSubview(wait) 
    spinnerView.addSubview(text) 
    spinnerView.center = view.center 
    spinnerView.tag = 1000 
} 

UPDATE когда я посылаю запрос от ViewController вроде как

@IBAction func loginAction(sender: AnyObject) { 
    let email = textEmail.text 
    let password = textPassword.text 
    spinnerInitialization() 
    startSpinner() 
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
    appDelegate.loginRequest(email!, password: password!) 
} 

func spinnerInitialization(){ 
    spinnerView = UIView(frame: CGRect(x:0, y:0,width: 250,height: 50)) 
    spinnerView.backgroundColor = UIColor.blackColor() 
    spinnerView.layer.cornerRadius = 10 
    let wait = UIActivityIndicatorView(frame: CGRect(x:0,y: 0,width: 50,height: 50)) 
    wait.color = UIColor.whiteColor() 
    wait.hidesWhenStopped = false 
    wait.startAnimating() 
    let text = UILabel(frame: CGRect(x:60,y:0,width:200,height: 50)) 
    text.textColor = UIColor.whiteColor() 
    text.text = "Please wait..." 
    spinnerView.addSubview(wait) 
    spinnerView.addSubview(text) 
    spinnerView.center = self.view.center 
    spinnerView.tag = 1000 
} 

func startSpinner(){ 
    view.addSubview(spinnerView) 
} 

func stopSpinner(){ 
    let subViews = view.subviews 
    for subView in subViews{ 
     if subView.tag == 1000{ 
      subView.removeFromSuperview() 
     } 

    } 
} 

Затем счетчик показывает

Пожалуйста, помогите мне решить эту проблему Благодаря

+0

Пожалуйста удалить dispatch_async (dispatch_get_main_queue ()), где у вас есть начало spinner – iMHitesh

+0

ohky я пытаюсь –

+0

@HiteshSurani Нет, он не работает все три функции, получая звонок от счетчика, но не показывающий его –

ответ

0

Вы делаете dataTaskWithRequest который является Асинхронный обработать. Вы должны добавить обработчик завершения для того, чтобы ваша функция, чтобы ждать, пока процесс завершится примерно так:

func loginRequest(var email: String,password: String ,complete: (evalSuccess: Bool) ->()){ 

///Your code: 

    if(status == 0){ 


        let dialog = UIAlertController(title: "Login Unsuccessful?", message: message, preferredStyle: UIAlertControllerStyle.Alert); 

        let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default){(ACTION) in 

         print("Ok Button Action ") 
        } 

        dialog.addAction(okAction); 

        dispatch_async(dispatch_get_main_queue(), { 

         self.window?.rootViewController?.presentViewController(dialog, animated: true, completion: nil) 

        }) 


       } 
       else 
       { 
        complete(evalSuccess: True) 
        let newModel.. 
       ///your code 

      } 

И затем вызвать его в appDelegate как:

loginRequest(youremail, yourpassword){success in 
if success{ 
//Do something 
} 

} 
+0

Здесь я использовал этот метод в первый раз. Пожалуйста, проверьте мои обновления, что я использую, и где я хочу показать spinner View –

+0

Вы должны вызвать функцию, как я показал вам в своем ответе. Увидеть разницу. – Dershowitz123

+0

'complete (evalSuccess: true)' give me 'Использование неразрешенного идентификатора 'complete'' –

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