如何根据远程服务器的响应以编程方式从另一个视图控制器调用视图控制器

How to call the view controller from another view controller programmatically depending on the response from the remote server

在我的应用程序中,我在主视图控制器 (loginViewController.swift) 中获取服务器凭据。当我单击 'loginViewController' 上的 'Login' 按钮时,它会显示具有 activity 指示器视图的应用程序 logoViewController,并且凭据值通过 https 连接传递到远程服务器。我在来自远程服务器的响应中得到一个 JSON 数组,其中包含消息 "Successful : 1" 或 "Unsuccessful : 0" 以及其他应用程序详细信息。

对于 JSON 数组中的值“1”,我想显示 menuViewController 屏幕,对于值“0”,我想显示 RegisterViewController 屏幕以在应用程序中进行进一步处理。

'menuViewController'/'RegisterViewController' 的调用应该发生在 'logoViewController' 的后台进程中。

如果尝试了下面给出的代码,但无法调用'menuViewController'/'RegisterViewController'。

如果我做错了,请告诉我。 UIStoryboard 方法是否正确? 任何建议或链接或教程都会有所帮助。

import UIKit

class logoViewController: UIViewController {

    @IBOutlet weak var act: UIActivityIndicatorView!
    override func viewDidLoad() {
        super.viewDidLoad()

        self.act.startAnimating()



        // Do any additional setup after loading the view.
    }


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

    // syncreq function is called from the connectionViewController.
    // connectionViewController is the common class for connecting to the remote server  
    func syncreq (JSONdata: AnyObject) { // Proceesing for PRMS response


       // Getting the value from the JSON
        var Successful = self.getIntFromJSON(JSONdata as NSDictionary, key: "Successful")


        println("Value of Successful : \(Successful)")

        if (Successful == 0){


            //let secondViewController = self.storyboard?.instantiateViewControllerWithIdentifier("registrationID") as regVC

            //self.navigationController?.pushViewController(secondViewController, animated: true)
            //performSegueWithIdentifier("registrationID", sender: self)


            let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
            var setViewController = mainStoryboard.instantiateViewControllerWithIdentifier("registrationID") as RegisterViewController
            self.presentViewController(setViewController, animated: false, completion: nil)

        }
        else if (Successful == 1){
             let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
            var setViewController = mainStoryboard.instantiateViewControllerWithIdentifier("mnuID") as menuViewController
            self.presentViewController(setViewController, animated: false, completion: nil)
        }



    }

    func getIntFromJSON(data: NSDictionary, key: String) -> Int {

        let info : AnyObject? = data[key]
        // println("Value of data[key] : \(key)")

        if let info = data[key] as? Int {
            println("Value of value for \(key) : \(info)")
            return info
        }

        else {
            return 0

        }

    }

}

提前致谢

我已经实现了一个通用函数,它将根据远程服务器的响应回调调用函数。

以下是我实现的功能

func connect(jsonString:NSDictionary) -> NSDictionary
{



            var JSONdata: AnyObject = ["" : ""] as Dictionary<String, String>

            println("------------------Function connserv")

            let prefs = NSUserDefaults.standardUserDefaults()


    var conn_timeout: AnyObject = prefs.objectForKey("conn_timeout")!
    var numberFormatter = NSNumberFormatter()
    var number:NSNumber? = numberFormatter.numberFromString(conn_timeout as! String)
    if let number = number {
        var integer = Int(number)
        println("\(integer)")
    }
            var recon_maxcount: AnyObject = prefs.objectForKey("recon_maxcount")!
    println("recon_maxcount in Connection : \(recon_maxcount)")
    println("conn_timeout in Connection : \(conn_timeout)")
    var recon_interval: AnyObject = prefs.objectForKey("recon_interval")!
    println("recon_interval in Connection : \(recon_interval)")
    var number1:NSNumber? = numberFormatter.numberFromString(recon_maxcount as! String)
    if let number1 = number1 {
        var integer1 = Int(number1)
        println("\(integer1)")
    }
    var number2:NSNumber? = numberFormatter.numberFromString(recon_interval as! String)
    //if let number2 = number2 {
        var integer2 = Int(number2!)
    var xval = UInt32(integer2)
        println("\(xval)")
    //}

            var IP: AnyObject = prefs.objectForKey("IP")!
            var port: AnyObject = prefs.objectForKey("Port")!
            println("IP in Connection : \(IP)")
            println("port in Connection : \(port)")
            prefs.synchronize()

            println("HTTP request jsonString : \(jsonString)")

            var request = NSMutableURLRequest(URL: NSURL(string: "https://\(IP):\(port)/")!)
    var response: NSURLResponse?
    var error: NSError?
    request.HTTPBody = NSJSONSerialization.dataWithJSONObject(jsonString, options: nil, error: &error)
    request.timeoutInterval = (number as! NSTimeInterval)
    request.HTTPMethod = "POST"
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    //request.setValue("application/json", forHTTPHeaderField: "Accept")
    request.addValue("gzip", forHTTPHeaderField: "Accept-encoding")
    println("Firing synchronous url connection......")
    println(request)
          //println("Before======\(i)!")
    for (var i = 0; i < number1 as! Int ; i++)
    {
        var error: NSError?
        println("Try connecting to server: \(NSDate())")

        let urlData = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: &error)
        //println("response : \(response)")
        //println("error : \(error)")

        if error != nil || urlData!.length == 0
        {
            println("Error happend timeout======\(error?.code)!")
            println(NSDate())

            sleep(xval as UInt32)
            //println("NSDate()")
            JSONdata = ["0" : "0"] as Dictionary<String, String>
            continue
        }
        else
        {
            println("Successfully connected : \(NSDate())")
            println("\(urlData!.length) bytes of data was returned")
            println(response!);
            if let httpResponse = response as? NSHTTPURLResponse {
                println("Status Code ------------------------------------>\(httpResponse.statusCode)")
            }
            println(NSString(data: urlData!, encoding: NSUTF8StringEncoding)!)
            var er: NSError?

            let JSONresdata: AnyObject = (NSJSONSerialization.JSONObjectWithData(urlData!, options: .MutableContainers,error: &er)!)
             println("==========================================================================================")
            println("JSON response : \(JSONresdata)")
            JSONdata = JSONresdata as! NSDictionary
            break

        }
    }
     println("out of for loop : \(JSONdata)")
    return JSONdata as! NSDictionary;

}