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

NSData cannot retrive image from internet anymore

以下代码在 iOS8.4.1(包括 8.4.1)之前工作正常。虽然它在 iOS9.0.1 中返回 nil。是错误还是此更改有 public 公告?我用两台 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)!)

使用 iOS 9,您不能再调用 HTTP,因为 ATS(应用程序传输安全)调用应该是 HTTPS。要使用 HTTP 链接,您应该在 info.plist 文件中插入以下密钥以禁用 ATS:

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

在 info.plist 文件 "NSAppTransportSecurity" 中创建一个新语音,例如 dict。 在其中插入密钥 "NSAllowsArbitraryLoads" 像布尔值并设置为 YES

;-)

这是与 Apple 在 iOS9 中所做的 ATS(应用程序传输安全协议)更改相关的问题。默认情况下,iOS9 忽略与 http 协议的通信。您的 URL 应该是 https。但是,您可以在您的应用程序中包含针对特定域的例外,或者您可以允许所有 http 从您的应用程序内进行的通信。
查看 Documentation 了解完整详情。

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

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

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