Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift 2:NSData(contentsOfURL:url)返回零_Ios_Json_Xcode_Foundation_Swift2 - Fatal编程技术网

Ios Swift 2:NSData(contentsOfURL:url)返回零

Ios Swift 2:NSData(contentsOfURL:url)返回零,ios,json,xcode,foundation,swift2,Ios,Json,Xcode,Foundation,Swift2,我有一个包含JSON文件的网页地址。我试图在Swift 2中以NSDictionary的形式访问JSON文件。每次我调用NSData(contentsofull:url!)其中url是NSURL?的类型,它返回nil。我使用的是Xcode 7测试版,该项目最初是在Xcode 6中完成的 以下代码是导致问题的原因 let url = NSURL(string:myurl) // myurl is the webpage address. let data = NSData(contentsOfUR

我有一个包含JSON文件的网页地址。我试图在Swift 2中以NSDictionary的形式访问JSON文件。每次我调用
NSData(contentsofull:url!)
其中
url
NSURL?
的类型,它返回
nil
。我使用的是Xcode 7测试版,该项目最初是在Xcode 6中完成的

以下代码是导致问题的原因

let url = NSURL(string:myurl) // myurl is the webpage address.
let data = NSData(contentsOfURL:url!) // the bit that returns nil
// data is set to nil
// I would perform NSJSONSerialization.JSONObjectWithData later.
让我困惑的是,当我尝试使用
swift
在终端中键入相同代码时,常量
data
没有设置为零。我试着重新启动Mac,但没有成功。我尝试重新安装Xcode,但没有成功

这是当我使用
swift
关键字向终端键入以下代码时发生的情况

$> swift
......
Welcome to Apple Swift version 2.0 (700.0.38.1 700.0.53). Type :help for assistance. 

1> import Foundation
2> var urlstr = "http://mywebsiteaddress/jsonfile.json"
3> var nsurl = NSURL(string:urlstr)
nsurl: NSURL? = "http://mywebsiteaddress/jsonfile.json"{
    ObjectiveC.NSObject = {...}
}
4> var nsdata = NSData(contentsOfURL:nsurl!)
nsdata: NSData? = 5925 bytes {
    ObjectiveC.NSObject = {...}
}
5> print(nsdata)
Optional(<Some Values..........>)
$>swift
......
欢迎使用Apple Swift 2.0版(700.0.38.1 700.0.53)。类型:帮助寻求帮助。
1、进口基金会
2> var urlstr=”http://mywebsiteaddress/jsonfile.json"
3> var nsurl=nsurl(字符串:urlstr)
nsurl:nsurl?="http://mywebsiteaddress/jsonfile.json"{
ObjectiveC.NSObject={…}
}
4> var nsdata=nsdata(contentsOfURL:nsurl!)
nsdata:nsdata?=5925字节{
ObjectiveC.NSObject={…}
}
5> 打印(nsdata)
可选()

当我在终点站尝试时,它确实起了作用。有人能帮我解决这个问题吗?

我希望它能在终端上工作,因为你在这里看到的可能不是Swift或Cocoa Touch中的bug,而是iOS 9中一个名为。这意味着默认情况下,iOS将不允许您向未使用SSL保护的服务器发出请求

引自链接:

应用程序传输安全性(ATS)允许应用程序向其Info.plist文件添加声明,以指定需要安全通信的域。ATS可防止意外泄露,提供安全的默认行为,且易于采用。无论您是在创建新应用程序还是在更新现有应用程序,都应尽快采用ATS

如果你正在开发一个新的应用程序,你应该只使用HTTPS。如果你有一个现有的应用程序,你现在就应该尽可能多地使用HTTPS,并尽快创建一个迁移其余应用程序的计划

若要解决此问题,您可以编辑info.plist文件以逐个域进行例外,或者完全禁用应用程序传输安全。这里有一个引用自的例子

NSAppTransportSecurity
NSExceptionDomains
yourserver.com
n包括多个域
NSTemporary ExceptionalLowsInSecureHttpLoads
NSTemporaryExceptionMinimumTLSVersion
TLSv1.1

尽管我建议您实际上不要将其用作解决方案,而是使用SSL安全的https URL。

当您不从
swift
运行它时,是否在沙盒模式下运行?+eleventy zillion表示“改用SSL安全的https URL”。
<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>yourserver.com</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow insecure HTTP requests-->
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <!--Include to specify minimum TLS version-->
      <key>NSTemporaryExceptionMinimumTLSVersion</key>
      <string>TLSv1.1</string>
    </dict>
  </dict>
</dict>