从 SwiftyJSON API 分配解析的 JSON 显示错误

Posted

技术标签:

【中文标题】从 SwiftyJSON API 分配解析的 JSON 显示错误【英文标题】:Assigning parsed JSON from SwiftyJSON API shows error 【发布时间】:2016-02-11 18:49:15 【问题描述】:

我最近从 Objective-C 更新到 Swift,在以本机方式解析 JSON 时确实令人困惑,因此在 *** 上搜索时,我发现了 SwiftyJSON API,它真的很酷。将解析的 JSON 值分配给标签时出现错误。我已将结果存储在一个数组中,但在 tableview 上显示它时显示错误。

//Array where I store the parsed JSON
var categoryCount = [Int]()

override func viewDidLoad() 
    super.viewDidLoad()

    // Do any additional setup after loading the view.
    getData()


func getData() 

    Alamofire.request(.GET, "http://www.artively.com/api/MobileApi/get_parent_category")
        .responseJSON  response in
            if let value = response.result.value 
                let json = JSON(value)
                self.parseJSON(json)
            
        


func parseJSON(json: JSON) 
    for result in json["data"].arrayValue 
        print("The count are",result["product_count"].int!)
        self.categoryCount.append(result["product_count"].int!)
    

    print("The category count are", categoryCount.count)

最后,当我执行这段代码时,应用程序崩溃了:

 cell.countLable.text =  "\(categoryCount[indexPath.row])"
      //Error appear in above code

这是 JSON 结果:


  "responsecode": "200",
  "responsemsg": "Successfull",
  "data": [

  "pk_category_id": 60,
  "category_name": "Collage",
  "category_logo": "http://www.artively.com//Upload/category_logo/28102015163738_collage_icon.png",
  "category_logo_selected": "http://www.artively.com//Upload/category_logo/28102015163738_collage_icon.png",
  "product_count": 10
,

  "pk_category_id": 65,
  "category_name": "Contemporary",
  "category_logo": "http://www.artively.com//Upload/category_logo/28102015163521_contempory_icon.png",
  "category_logo_selected": "http://www.artively.com//Upload/category_logo/28102015163521_contempory_icon.png",
  "product_count": 242
,
...So on

在上面的响应中,我已经解析了“product_count”的值,将它存储在一个数组中并显示在一个 tableview 单元格中,但是应用程序崩溃了......

【问题讨论】:

崩溃说明了什么? 小建议。问题的标题应该与问题的内容有关。请编辑您的问题的标题。 1 - EXE_BAD_INSTRUCTION(代码 = EXC_I386_INVOP,子代码 = 0X0)。 2- 数组索引超出范围。这就是 XCode 显示的错误 您正在寻找一个不在数组中的对象。 这一行 categoryCount[indexPath.row] 仅在 indexPath.row 小于数组计数时才有效。 【参考方案1】:

解析后你应该调用self.tableView.reloadData()。然后还要确保您正在实现此方法:

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return self.categoryCount.count

这将确保行数与数组中的元素一样多,因此indexPath.row 不会超出数组边界。

【讨论】:

以上是关于从 SwiftyJSON API 分配解析的 JSON 显示错误的主要内容,如果未能解决你的问题,请参考以下文章

swiftyJSON 从 NSURL 解析 json

iOS:从 Alamofire 解析的 SwiftyJSON 是一个数组。尝试解析时为空

SwiftyJSON - 无法从 JSON 字符串获取 transactionId

从推送通知解析时出现 SwiftyJson 解析问题

使用 SwiftyJSON 将 JSON 解析为结构

SwiftyJSON - 无法解析 Json