【问题标题】:The file couldn’t be opened because URL type http isn’t supported该文件无法打开,因为 URL 类型 http 不受支持
【发布时间】:2015-12-22 13:41:03
【问题描述】:

使用 iOS 9 我正在尝试使用 NSFileManager's moveItemAtURL

do {
    print(localURL) // http://localhost:3000/api/v1/activities
    print(cacheFile) // file:///Users/kyledecot/Library/Developer/CoreSimulator/Devices/35C03988-D8F5-42E5-AB35-B99BE461EEAE/data/Containers/Data/Application/69593B3A-F764-4BC3-89AD-72B701BF85C8/Library/Caches/activities.json 
    try fileManager.moveItemAtURL(localURL, toURL: cacheFile)
} catch let error as NSError {
    print(error)
}

当我发现错误时:

Error Domain=NSCocoaErrorDomain Code=262 “无法打开文件“活动”,因为不支持 URL 类型 http。”用户信息={NSURL=http://localhost:3000/api/v1/activities}

更新 #1

我已经在Info.plist 中添加了适当的值,以确保 ATS 满意(见屏幕截图)。奇怪的是,我能够使用 HTTP(通过 dataTaskWithRequest:)从本地服务器下载数据,但 NSFileManager 在尝试执行 moveItemAtURL 时抱怨相同的 URL。

【问题讨论】:

  • 马特的回答是正确的。由于您使用的是localhost,我假设您有一个用于测试的 API 的本地设置。我建议禁用 ATS only in your Debug 配置,以便 ATS 在已发布的应用程序中仍然适用。另一种方法是明确地将 localhost 列入白名单,而不是一起禁用 ATS 的一揽子方法。
  • @vcsjones 我已经添加了(暂时)禁用 ATS 所需的密钥,但无济于事。请查看我更新的问题。
  • 好吧,但是localURL 不是一个`file:///` URL,所以很难看出你期望在这里发生什么。 NSFileManager 处理文件,而不是更广泛意义上的 URL。你的代码没有意义。更新了我的答案以指出这一点。 :)

标签: ios xcode swift ios9


【解决方案1】:

这里有两件事要知道:

  • 在 iOS 9 中,默认情况下不支持 http://。您必须安全地进行通信(使用https://)。如果需要,您可以在 Info.plist 中关闭此功能。

  • NSFileManager URL 必须是磁盘上文件的路径——也就是说,它们必须是 file URL。你的不是;这是一个http:// URL。如果您的目标是下载文件然后将其复制到某处,请使用 NSURLSession 的下载任务。

【讨论】:

  • 我在NSAppTransportSecurity 下添加了NSAllowsArbitraryLoads (YES),但似乎没有帮助。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2019-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多