刚刚学习如何使用游戏公司的一些API在Swift上使用JSON。我的代码中遇到错误。
致命错误:在解包可选值时意外发现nil
虽然我第一次尝试在我的应用程序中它完全正常,但只有当我想在我的应用程序上搜索另一个名称时才会出现这种情况。
这是我的代码:
import UIKit
class ViewController: UIViewController {
lazy var data = NSMutableData()
@IBOutlet weak var summonerName: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func startConnection(){
var text: String = summonerName.text
let urlPath: String = "https://na.api.pvp.net/api/lol/na/v1.4/summoner/by-name/\(text)?api_key=<key>"
var url: NSURL = NSURL(string: urlPath)!
var request: NSURLRequest = NSURLRequest(URL: url)
var connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: false)!
connection.start()
}
func connection(connection: NSURLConnection!, didReceiveData data: NSData!){
self.data.appendData(data)
}
@IBAction func buttonAction(sender: UIButton) {
startConnection()
}
func connectionDidFinishLoading(connection: NSURLConnection!){
var err: NSError?
var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as! NSDictionary
println(jsonResult)
}
}
编辑:我已将if - else添加到我的jsonResult中,以查看输入的文本是否为Empty,还有一个打印方法,以查看文本是否输入正确。我的问题仍然存在,在我的第一次尝试一切正常,我能够提取我需要的“summonerLevel”信息,但是,只要我键入另一个名称来搜索致命错误恢复。在我的搜索文本上,正确搜索了该名称。
答案 0 :(得分:0)
我认为错误就在这里:
let urlPath: String = "https://na.api.pvp.net/api/lol/na/v1.4/summoner/by-name/\(text)?api_key=<key>"
var url: NSURL = NSURL(string: urlPath)!
在urlPath
中,你应该用一些真正的api密钥替换<key>
。我在操场上测试了该代码,NSURL(string: urlPath)
返回nil
- 在其上应用强制解包运算符会导致异常。
我尝试使用随机数更改<key>
,而是改为工作。