所有我是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我不确定哪个是正确的。
任何想法都会受到赞赏,或者也许是一个简单的解决方法。
答案 0 :(得分: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)")
}
错误“IndexPath not resolved”:
您使用的方法numberOfRowsInSection
代替cellForRowAtIndexPath
。
同时覆盖这两种方法。
编辑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
}