我不断收到一个使用未解决的标识符错误swift
问题描述:
当我尝试运行这个项目时,我迎来了一个“使用未解析的标识符错误”。这里是代码我上线的误差与我不断收到一个使用未解决的标识符错误swift
var jsonDict = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
let task : NSURLSessionDataTask = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in if((error) != nil) { print(error!.localizedDescription) } else { let err: NSError? do { var jsonDict = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary } catch { if(err != nil) { print("JSON Error \(err!.localizedDescription)") } else { //5: Extract the Quotes and Values and send them inside a NSNotification let quotes:NSArray = ((jsonDict.objectForKey("query") as! NSDictionary).objectForKey("results") as! NSDictionary).objectForKey("quote") as! NSArray dispatch_async(dispatch_get_main_queue(), { NSNotificationCenter.defaultCenter().postNotificationName(kNotificationStocksUpdated, object: nil, userInfo: [kNotificationStocksUpdated:quotes]) }) } } } })
可有人请帮助。谢谢。
答
您的问题可能是catch
块中的这一行代码。
let quotes:NSArray = ((jsonDict.objectForKey("query") as! NSDictionary).objectForKey("results") as! NSDictionary).objectForKey("quote") as! NSArray
在上述声明jsonDict
超出范围。您在do
块中声明了jsonDict,但正试图在catch
块中使用它。
答
这段代码的蛛网正是为什么SwiftyJSON库存在。我高度推荐它,它可以使用cocoapods导入到您的项目中。
使用这个库所产生的代码将是
jsonQuery["query"]["results"]["quote"]
这是更具可读性和为您实现更多的API,要快得多。
答
尝试以下操作: - (假设JSON具有根节点结构)
let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: yourURL)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(urlRequest) {
(data, response, error) -> Void in
let httpResponse = response as! NSHTTPURLResponse
let statusCode = httpResponse.statusCode
if (statusCode == 200) {
do{
let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments)
if let queries = json["query"] as? [[String: AnyObject]] {
for query in queries {
if let quote = query["quote"] as? String {
self.quoteArr.append(quote)
}
}//for loop
dispatch_async(dispatch_get_main_queue(),{
// your main queue code
NSNotificationCenter.defaultCenter().postNotificationName(kNotificationStocksUpdated, object: nil, userInfo: [kNotificationStocksUpdated:quotes])
})//dispatch
}// if loop
}
catch
{
print("Error with Json: \(error)")
}
}
else
{
// No internet connection
// Alert view controller
// Alert action style default
}
哪一行,你得到的错误? – WMios
是的,它发生在哪条线上? –
@WMios我刚刚更新了代码,以显示错误的位置 –