首页 文章

常量在Swift中获得nil值

提问于
浏览
-2

有没有人知道为什么让数据变为零,并且我在运行以下函数后得到消息“致命错误:在展开可选值时意外发现nil”?

let session = NSURLSession.sharedSession()
    request.HTTPMethod = "POST"

    request.addValue("application/x-www-form-urlencoded;charset=UTF-8", forHTTPHeaderField: "Content-Type")
    let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in

        let strData = NSString(data: data!, encoding: NSUTF8StringEncoding)!

        let codexxx = String(strData)
        let serverResponse = ServerResponseHandler()
        let number =  serverResponse.removeCodeFromXML(codexxx)
        let data = number.dataUsingEncoding(NSUTF8StringEncoding)

        self.posts = []
        self.parser = NSXMLParser(data: data!)
        self.parser.delegate = self

        print ("NUMBER: \(number)")

        let success:Bool = self.parser.parse()
        if success {
            print("parse success!")
           } else {
            print("parse failure!")
        }
        print("Response!: \(strData)")
    })
    task.resume()  
}

我需要在运行后关闭对象或功能吗?我真的很无能为力 .

2 回答

  • 0

    completionHandler的 data 参数具有可选类型 NData? (参见docs),因此您可能需要在使用 ! 解包可选项之前检查它是否为nil,或者执行类似的操作:

    ...
    request.addValue("application/x-www-form-urlencoded;charset=UTF-8", forHTTPHeaderField: "Content-Type")
    let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
        if let data = data, strData = NSString(data: data, encoding: NSUTF8StringEncoding) {
            let codexxx = String(strData)
            // ... continue here
        } else {
            // there were no data received (either data or strData is nil) 
        }
    })
    
  • 0

    每当连接失败时,您将获得一个nil数据对象 . 您应该始终检查A.是否有错误对象,以及B.响应的状态代码是200.如果出现错误,或者状态代码不是200,您甚至可能根本不需要查看数据 .

相关问题