不幸的是,今天早上我的XCode更新到了第7版,我用http开发的iOS应用现在需要https。所以,在很多教程之后,我配置了我的MAMP服务器,以便使用https/ssl创建一个虚拟证书。现在在我的iOS应用中,URL如下所示:
static var webServerLoginURL = "https://localhost:443/excogitoweb/mobile/loginM.php"
static var webServerGetUserTasks = "https://localhost:443/excogitoweb/mobile/handleTasks.php"
static var webServerGetUsers = "https://localhost:443/excogitoweb/mobile/handleUsers.php"
static var webServerGetProjects = "https://localhost:443/excogitoweb/mobile/handleProjects.php"
如果我尝试在我的浏览器中访问它们,它们可以正常工作。我习惯于使用NSURLSession.sharedSession().dataTaskWithRequest()访问数据库和php文件,现在它会在title中引发错误。例如,下面这行代码引发了错误:
if let responseJSON: [[String: String]] = (try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions())) as? [[String: String]] {
...
}
以下是完整的错误消息:
2015-09-21 16:41:48.354 ExcogitoWeb[75200:476213] CFNetwork SSLHandshake failed (-9824)
2015-09-21 16:41:48.355 ExcogitoWeb[75200:476213] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824)
fatal error: unexpectedly found nil while unwrapping an Optional value
我想知道如何解决这个问题。我在这里读到了一些有用的答案,但还有很多事情我仍然不明白,如果有人能帮助/解释我,我将非常感激。
3条答案
按热度按时间1bqhqjot1#
将其添加到应用的
Info.plist
nom7f22z2#
通常意味着你在做一些不太好的事情,通过查看你的
if
我可以看到有一个
data!
,但是该数据对象是nil。在使用它们之前,您真的应该打开可选项,特别是在处理远程数据时。然后你有一个网络错误,这可能与苹果在iOS 9中添加的
ATS
有关。有关如何 * 临时 * 禁用ATS,请参阅另一个答案。https://stackoverflow.com/a/30748166/421755
编辑:我现在看到你在本地主机上添加了ssl,这很好。但是,这还不足以让ATS工作,因为它需要TLS 1.2而不是自签名证书。
vnzz0bqm3#
这是一个很老的问题,但我想我会回答。这通常发生在当你试图打开一个http对象,它返回零。
请确保打开url并给予它一个默认值。
例如:
希望这对你有帮助!