2015-04-02 18 views
0

我可以使用iPhone中的任何网络API(如AFNetworking,MKNetworkKit等)将任何函数的服务器响应返回到其调用函数。在iPhone中返回HTTPS响应的网络API

目前我正在使用NSURLRequest的httpGet函数。我做了以下功能,但我无法将服务器响应返回给它的调用函数。请帮帮我。

func connserv(jsonString:NSDictionary) -> NSDictionary{ 
    var abc: NSDictionary? 
    // This is the action performed when clicked on the Connect button on the connectivity screen 
    println("------------------Function connserv") 

    let prefs = NSUserDefaults.standardUserDefaults() 
    var IP: AnyObject = prefs.objectForKey("IP")! 
    var port: AnyObject = prefs.objectForKey("Port")! 
    println("IP in Connection : \(IP)") 
    println("port in Connection : \(port)") 
    prefs.synchronize() 
    //var learn = LearnNSURLSession() 
    let localizedModel = UIDevice.currentDevice().localizedModel 
    let model = UIDevice.currentDevice().model 
    let devicesystemVersion = UIDevice.currentDevice().systemVersion 

    println("HTTP request jsonString : \(jsonString)") 
    var request = NSMutableURLRequest(URL: NSURL(string: "https://\(IP):\(port)/")!) 

    var response: NSURLResponse? 
    var error: NSError? 

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

    var err: NSError? 
    request.HTTPBody = NSJSONSerialization.dataWithJSONObject(jsonString, options: nil, error: &err) 
    request.HTTPMethod = "POST" 
    request.setValue("application/json", forHTTPHeaderField: "Content-Type") 
    request.setValue("application/json", forHTTPHeaderField: "Accept") 
    // send the request 
    var learn = LearnNSURLSession() 
    println("HTTP request : \(request)") 
    learn.httpGet(request) { 
     (resultString, error) -> Void in 
     if error != nil 
     { 
      println("completion block") 

     } 
     else 
     { 
      let data = (resultString as NSString).dataUsingEncoding(NSUTF8StringEncoding) 
      var er: NSError? 
      let JSONdata: AnyObject = NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers,error: &er)! 

      let abc: AnyObject = NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves, error:&er)! 

      println("abc : \(abc)") 
      println("JSONdata : \(JSONdata)") 

      learn.callback(result: resultString, error: error) 
     } 
    } 
    //return abc!; 
} 

回答

0

我不知道你的LearnNSURLSession类的工作,所以我不能推荐一种解决方案。但在这里是如何与返回的数据和任何错误信息,找到返回的头和状态,同时,从NSURLConnection的,记录here

NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.currentQueue(), completionHandler: { 
     response, data, error in 
     if let response = response as? NSHTTPURLResponse { 
      debugPrintln(response.allHeaderFields) 
      let statusCode = response.statusCode 
      debugPrintln("statusCode: \(statusCode): \(NSHTTPURLResponse.localizedStringForStatusCode(statusCode))") 
     } else { println("That's odd.") } 
    }) 

虽然该文件表明,响应是NSURLResponsethis page明确你会得到一个NSHTTPURLResponse其中包含所有的标题和状态。

如果你需要一个同步版本,直到它得到的结果,将停止该功能,您可以使用this call instead,像这样:

var response:NSURLResponse? 
var e: NSError? 
NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: &e) 
debugPrintln(response) 

,让你到一个有意义的结果返回给调用者。

+0

Emrys57,我从服务器得到响应和一切。它没有问题。我想将服务器响应返回给connserv函数的调用函数。问题在那里。我希望你现在有个更好的主意 – 2015-04-02 14:31:37

+0

尝试新版本 – emrys57 2015-04-02 14:50:32

+0

我会尝试。我能否在异步连接中做同样的事情? – 2015-04-02 14:58:26