如何将JSON数据解析为表视图?

时间:2016-10-04 16:33:09

标签: ios swift

所有我是swift的菜鸟,只需设置记录,

我试图解析来自外部php文件的JSON数据并在tableview中显示数据,数据来自其他地方托管的php文件,其值为

{
    'id' : '1',
    'username' : 'test',
    'password' : 'test',
    'email' : 'test@test.com'
 }

我的代码如下

class ForuthTableViewController: UITableViewController {

@IBOutlet var userTable: UITableView!
@IBOutlet weak var refreshButton: UIBarButtonItem!


var values:NSArray = []

override func viewDidLoad() {
    super.viewDidLoad()
    getUsers()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

@IBAction func refreshPressed(_ sender: UIBarButtonItem) {
    getUsers()
}

func getUsers(){

    let url = NSURL(string: "http://xxx.xxxxxx.xx/get.php")

    let userdata = NSData(contentsOf: url! as URL)

    do {
        values = try JSONSerialization.jsonObject(with: userdata as! Data, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSArray

        print("Parse success")
    } catch {
        print("Parse error")
        return
    }
    print(values)


    //userTable.reloadData()

}

override func numberOfSections(in tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return values.count
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return 0
}



override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    let cell = tableView.dequeueReusableCellWithIdentifier("userCell", forIndexPath: indexPath) as! UITableViewCell

    let maindata = values[indexPath.row]
    cell.username.text = maindata["username"] as? String
    cell.password.text = maindata["password"] as? String
    cell.email.text = maindata["email"] as? String

    return cell

}
}

我在youtube上按照教程创建了一个登录/注册应用程序,但它来自旧版本的xcode,当我将代码复制到所有地方的错误时,所以不知道从哪里开始,

尝试寻找一个简单的JSON教程但是有很多不同的方法来接近JSON我不确定哪个是正确的。

任何想法都会受到赞赏,或者也许是一个简单的解决方法。

1 个答案:

答案 0 :(得分:1)

  1. 收到错误“从此处抛出的错误未处理”:抓住错误。

    do {
        values = try JSONSerialization.jsonObject(with: userdata as! Data, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSArray
    
        print("Parse success")
    } catch {
        print("Parse error")
        print("Error: \(error)")
    }
    
  2. 错误“IndexPath not resolved”:
    您使用的方法numberOfRowsInSection代替cellForRowAtIndexPath。 同时覆盖这两种方法。

  3. 编辑1:

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    应该是:
    override func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

    override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }
    
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return values.count
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
    
        let cell = tableView.dequeueReusableCell(withIdentifier: "userCell", for: indexPath) as! UITableViewCell
    
        let maindata = values[indexPath.row]
        cell.username.text = maindata["username"] as? String
        cell.password.text = maindata["password"] as? String
        cell.email.text = maindata["email"] as? String
    
        return cell
    
    }