NSData无法再从互联网上检索图像

时间:2015-09-28 10:03:08

标签: ios image nsdata

以下代码在iOS8.4.1(包括8.4.1)之前正常工作。虽然它在iOS9.0.1中没有任何问题。这是一个错误还是公众宣布这一变化?我用两台iPad进行了测试。

let url = NSURL(string: "http://www.mapshots.com/wp-content/uploads/2014/05/mapshots-ag-studio-agricultural-mapping-software-logo.png")
let data = NSData(contentsOfURL: url!)
NSLog("Data length @%", (data?.length)!)

2 个答案:

答案 0 :(得分:1)

这是与Apple在iOS 9中进行的ATS(App Transport Security Protocol)更改相关的问题。默认情况下,iOS9忽略与http协议的通信。您的网址应为https。但是,您可以在应用中添加特定域的例外,或者允许在您的应用中允许所有http通信。
查看Documentation以获取完整详细信息。

要允许应用程序中的所有http域,您应该添加

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

但是,由于Apple推荐了这些新设置,因此您应该选择在应用中为此特定域添加例外,而不是允许所有http个域。请检查此thread以实现此目的。

答案 1 :(得分:0)

使用iOS 9,您无法再调用HTTP,因为ATS(App Transport Security)调用应该是HTTPS。要使用HTTP链接,您应该在info.plist文件中插入以下密钥以禁用ATS:

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

在info.plist文件中创建一个新的语音&#34; NSAppTransportSecurity&#34;像dict。 在其中插入密钥&#34; NSAllowsArbitraryLoads&#34;像boolean并设置为YES

- )