2017-01-29 36 views
0

我写了一个简单的代码,它从一个新闻API获取特定数据并将其打印到控制台。Parsed JSON数据没有被打印到控制台

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    let url = URL(string: "https://newsapi.org/v1/articles?source=bbc-news&sortBy=top&apiKey=af5f94cdf07e42ee877a3f2c2199d097") 

    let task = URLSession.shared.dataTask(with: url!) {(data, response, error) in 
     if error != nil { 
      print("Error") 
     } 
     else { 
      if let content = data { 
       do { 
        let myJson = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject 
        if let articles = myJson["articles"] as? NSDictionary { 
         if let title = articles["title"] { 
          print(title) 
         } 
        } 
       } 
       catch {} 
      } 
     } 
    } 
    task.resume() 
} 

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

但奇怪的是,这不会返回错误,也不会将所需的“标题”打印到控制台。为什么是这样?

+0

您正在加载视图吗?该代码在游乐场中运行得很好。 – brandonscript

+0

对不起,我对swift很陌生 - 加载视图是什么意思?我没有对故事板进行任何更改,并且此代码位于viewDidLoad()函数下。 –

+0

当视图实际加载时,会调用'viewDidLoad()'。你必须运行应用程序并加载视图。 – brandonscript

回答

1

我想问题是应用程序传输安全。

确保您在plist文件中设置了这些键。

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSAllowsArbitraryLoads</key> 
    <true/> 
</dict> 
+0

我已经在我的plist文件中添加了这些键,但同样的事情发生。是不是AllowsArbitraryLoads键只需要f或只有http网址?我使用的网址是https –

+0

您还需要指定ATS的https端点。 – brandonscript