NSData 无法再从互联网上检索图像 [重复]

Posted

技术标签:

【中文标题】NSData 无法再从互联网上检索图像 [重复]【英文标题】:NSData cannot retrive image from internet anymore [duplicate] 【发布时间】:2015-12-25 12:54:00 【问题描述】:

以下代码在 ios8.4.1(包括 8.4.1)之前运行良好。虽然它在 iOS9.0.1 中为 nil。这是一个错误还是有此更改的公开公告?我用两台 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)!)

【问题讨论】:

这个问题是重复的。我应该删除它还是离开它? 【参考方案1】:

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

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

在 info.plist 文件“NSAppTransportSecurity”中创建一个新声音,如 dict。 在其中插入键“NSAllowsArbitraryLoads”,如布尔值并设置为 YES

;-)

【讨论】:

与其完全关闭它,只需将个别域的例外添加到 info.plist。 是的,例外会更好...【参考方案2】:

这是与 Apple 在 iOS 9 中所做的 ATS(应用程序传输安全协议)更改有关的问题。默认情况下,iOS9 忽略与http 协议的通信。您的网址应为https。但是,您可以在您的应用中包含特定域的例外情况,或者您可以允许在您的应用中允许所有http 通信。 详情请查看Documentation。

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

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

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

【讨论】:

以上是关于NSData 无法再从互联网上检索图像 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

来自 NSData 的图像未正确加载

NSData/UIImage 到字符串

将 NSData 数组保存到 CoreData

如何使用“imageWithData”保存和检索UIImages保持正确的图像格式?

iOS NSData与其他类型互转

将 GIF 图像转换为 nsdata