这个功能有一个奇怪的问题:
func retrieveToken() {
var postRequest = NSMutableURLRequest(URL: NSURL(string: "http://example.com"));
postRequest.HTTPMethod = "POST"
var responseData = NSMutableData();
NSURLConnection.sendAsynchronousRequest(postRequest, queue: NSOperationQueue.mainQueue(), completionHandler: { (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
responseData = NSMutableData(data:data);
})
var responseDict:Dictionary<String,AnyObject> = NSJSONSerialization.JSONObjectWithData(responseData, options: NSJSONReadingOptions.MutableLeaves, error: nil) as Dictionary;
}
此函数应该向URL发送POST请求(有效)以接收令牌。但是,由于某种原因,当我运行此代码时,我在将postRequest的HTTPMethod设置为POST的行中获得了EXC_BAD_INSTRUCTION。我觉得我忽略了一些非常明显的东西,但我看不清楚是什么。有什么问题?
答案 0 :(得分:1)
你忽略了(至少)两个要点。
这些问题中的第一个很可能会导致您遇到的崩溃,因为您在某个时候尝试取消引用data
,但它恰好是零。但可能是NSJSONSerialization不喜欢传递空的NSMutableData
实例。
阅读Optionals,然后阅读异步编程,然后再看看你想要实现的目标。只需使用同步网络请求就会导致糟糕的用户体验,因为界面冻结等待您的网络请求完成。
答案 1 :(得分:0)
我通过使用sendSynchronousRequest修复了问题:
responseData = NSURLConnection.sendSynchronousRequest(postRequest, returningResponse: nil, error: nil) as NSData;