【问题标题】:session.dataTask not working Swiftsession.dataTask 不工作 Swift
【发布时间】:2017-05-15 18:38:10
【问题描述】:

我有一个从 API 请求中检索数据的方法:

    let session = URLSession.shared
    let url = URL(string: "http://eventregistry.org/json/article?conceptUri=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FAfghanistan&lang=eng&action=getArticles&articlesSortBy=date&resultType=articles")!

    let task = session.dataTask(with: url) { (data, _, _) -> Void in
        if let data = data {
            print(JSON(data: data))
            completion()
        }
    }
    task.resume()

该链接在通过浏览器访问时完美运行,但是在 XCode 中逐行调试时,let task = session.dataTask 中的任何代码都不会执行,因此打印不会打印在日志中。

我正在通过模拟器运行,并且我的笔记本电脑有互联网,我只是不确定为什么这不起作用。

有人知道为什么吗?

【问题讨论】:

  • 当你说“逐行调试”时,你是在让runloop运行吗?
  • @Ssswift 抱歉,没有设置。它现在已执行但由于某种原因检索到的 JSON 为空?尽管在浏览器中发出请求时,它会从请求中检索所有数据
  • 我将它粘贴到 Xcode 中的一个新项目中,将打印/完成行更改为 data.count 的简单 NSLog(因为我不知道您的“JSON”类/结构是什么),并将“http”更改为“https”(根据 Xcode 的警告),然后运行它。它显示返回 15594 个字节。我什至在完成处理程序中放置了一个断点,它被触发了。您能否更具体地说明您是如何在调试器中运行它的?
  • @Ssswift 嗯,我的返回 70 个字节:/? JSON 类由库“SwiftyJSON”提供,我使用模拟器运行它,该模拟器在 viewDidLoad() 上调用此函数>
  • 你试过不需要模拟器的项目吗?听起来很可疑,好像您的问题不是代码,而是模拟器对您的网络请求所做的事情。

标签: swift get request


【解决方案1】:

试着这样写。也尽量避免“虚空”

首先你需要创建 urlRequest。

例子:

let urlRequest = URLRequest(url: URL(string: "Your url/API links here")!)

let task = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in {

     //Your codes here
   }

task.resume()
}

希望对您有所帮助。如果您需要任何进一步的解释,我将发布一个示例答案以检索注册表文章。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多