Ios Swift 2:NSData(contentsOfURL:url)返回零
我有一个包含JSON文件的网页地址。我试图在Swift 2中以NSDictionary的形式访问JSON文件。每次我调用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
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>