2016-07-22 75 views
0

当我尝试运行这个项目时,我迎来了一个“使用未解析的标识符错误”。这里是代码我上线的误差与我不断收到一个使用未解决的标识符错误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]) 

        }) 
        } 
       } 

      } 
     }) 

可有人请帮助。谢谢。

+0

哪一行,你得到的错误? – WMios

+0

是的,它发生在哪条线上? –

+0

@WMios我刚刚更新了代码,以显示错误的位置 –

回答

0

您的问题可能是catch块中的这一行代码。

let quotes:NSArray = ((jsonDict.objectForKey("query") as! NSDictionary).objectForKey("results") as! NSDictionary).objectForKey("quote") as! NSArray 

在上述声明jsonDict超出范围。您在do块中声明了jsonDict,但正试图在catch块中使用它。

0

这段代码的蛛网正是为什么SwiftyJSON库存在。我高度推荐它,它可以使用cocoapods导入到您的项目中。

使用这个库所产生的代码将是

jsonQuery["query"]["results"]["quote"] 

这是更具可读性和为您实现更多的API,要快得多。

0

尝试以下操作: - (假设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 


      } 
相关问题