【问题标题】:spinnerView is not working in appdelegatespinnerView 在 appdelegate 中不起作用
【发布时间】:2016-06-20 06:34:28
【问题描述】:

您好,我正在使用 appdeligate 进行一些特定的方法,例如登录应用程序并从应用程序注销。 在这里我有一个代码 目前运行良好,但问题是当登录请求发送到服务器时,微调器视图不起作用

    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
}

更新 当我从 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()
        }

    }
}

然后微调器显示

请帮我解决这个问题 谢谢

【问题讨论】:

  • 请删除您已启动微调器的 dispatch_async(dispatch_get_main_queue())
  • @HiteshSurani 不,所有三个函数都无法调用微调器但没有显示它
  • 亲爱的你能和我分享一下代码吗?(删除你的私人代码)
  • 我确实分享了所有相同的代码,我有 ViewController 我想在其中展示那个微调器
  • 检查是否在设置动画之前创建了微调器对象。我认为,微调器可能为零。

标签: ios iphone xcode swift progress-bar


【解决方案1】:

您正在执行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
}

}

【讨论】:

  • 这里我第一次使用这个方法。请检查我的更新我正在使用什么以及我想在哪里显示微调器视图
  • 您必须像我在回答中向您展示的那样调用该函数。看看区别。
  • completion(evalSuccess: true) 给我Use of unresolved identifier 'completion'
  • 对不起,它是 complete 而不是 completion。编辑了我的答案。立即尝试。
  • 是的,我做到了,但我仍然陷入困境
猜你喜欢
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多