NSURLSession dataTaskWithRequest completionHandler获取NSZeroData?

时间:2014-10-14 01:12:05

标签: swift nsdata nsurlsession swift-playground stackexchange-api

我正在尝试从Stack Exchange API下载一些XML。但是,我没有得到任何结果。 URL在浏览器中访问时会显示XML,但我似乎无法以NSData对象的形式获取XML。或者更确切地说,我一直在使用NSZeroData。这是我的代码,请注意它是用Swift编写的:

import UIKit
import XCPlayground

XCPSetExecutionShouldContinueIndefinitely(continueIndefinitely: true)

var myRequest = NSURLRequest(URL:NSURL(string: "api.stackexchange.com/answers?site=stackoverflow"))

var mySession = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())

var dataTask = mySession.dataTaskWithRequest(myRequest, completionHandler: { (data, response, error) in
    var myData = data //myData now equals NSZeroData
})
dataTask.resume()

2 个答案:

答案 0 :(得分:0)

尝试:

var myRequest = NSURLRequest(URL:NSURL(string: "http://api.stackexchange.com/answers?site=stackoverflow"))

Diff是协议" http"

答案 1 :(得分:0)

一个对我有用的解决方案,

如果customersString中的NSURL *url = [NSURL URLWithString: customersString];定位到您服务器上的 php文件(可能是一个角落):

检查您的服务器上是否使用了正确的PHP版本!例如,这可以使用新的php文件完成:

<?php phpinfo(); ?>

<强>解释

你的php文件可能不是以正确的方式构建你想要的JSON(数组)响应,因为php-version 5.4以不同的方式构建数组(比较:Link to PHP.net):

<?php
    //before PHP 5.4
    $array = array(
        "foo" => "bar",
        "bar" => "foo",
    );
    // since PHP 5.4
    $array = [
        "foo" => "bar",
        "bar" => "foo",
    ];
?>

由于JSON损坏,这可能会导致 NSZeroData 响应。

因此:更改服务器上的PHP版本为我解决了这个问题。希望这会有所帮助!!!