0

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

目前我正在使用 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!;
}
4

1 回答 1

0

我不知道您的LearnNSURLSession课程是如何运作的,因此我无法提出解决方案。但这里是如何从 NSURLConnection 中找到返回的标头和状态,以及返回的数据和任何错误信息,记录在这里

    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.") }
    })

虽然该文档表明响应为NSURLResponse但此页面清楚地表明您将获得NSHTTPURLResponse包含所有标题和状态的 a 。

如果您需要一个同步版本,它将停止函数直到它得到结果,您可以使用这个调用来代替,如下所示:

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

这将允许您向调用者返回有意义的结果。

于 2015-04-02T14:22:47.083 回答