【发布时间】:2016-01-06 11:39:09
【问题描述】:
我现在正在做一个项目,我正在使用 SwiftyJSON 从我的服务器解析 json,起初它加载得很好,但是当我重新加载它时,它似乎在我重新启动应用程序之前不起作用,这是我使用的方法:
override func viewDidLoad() {
super.viewDidLoad()
connectToServer()
self.refreshControls.addTarget(self, action: "connectToServer", forControlEvents: .ValueChanged)
self.tableView.addSubview(self.refreshControls)
}
func connectToServer() {
let urlString = "http://myserver.com/"
if let url = NSURL(string: urlString) {
if let data = try? NSData(contentsOfURL: url, options: []) {
let json = JSON(data: data)
self.parseJSON(json)
}
}
}
func parseJSON(json: JSON) {
numberOfRows = json.count
for i in 0...numberOfRows {
let name = json[i]["name"].stringValue
let age = json[i]["age"].stringValue
let g = json[i]["gender"].stringValue
let b = json[i]["bday"].stringValue
names.append(name)
ages.append(age)
genders.append(g)
bdays.append(b)
}
tableView.reloadData()
self.refreshControls.endRefreshing()
}
override func numberOfSectionsInTableView(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 numberOfRows
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("cell") as! MainCell!
if cell == nil {
cell = MainCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cell")
}
cell.nameLbl.text = names[indexPath.row]
cell.ageLbl.text = ages[indexPath.row]
cell.genderLbl.text = genders[indexPath.row]
cell.bdayLbl.text = bdays[indexPath.row]
return cell
}
我错过了什么吗?谢谢!
【问题讨论】:
-
能否请您也分享一下类定义和变量(tableView等)的声明。另外,如果 tableView.reloadData() 被调用?
-
您是否检查过您点击了
tableView.reladData()并且numberOfRows是否已更新? OT 你应该制作一个模型并制作一个对象,而不是有四个不同的数组。 -
您在哪里清除了姓名、年龄等数据数组?你只是追加了它,numberOfRows 被 Json.count 替换了,所以新添加的数据可能不会出现
-
不要为每个参数使用 4 个不同的数组。使用具有 4 个属性的自定义类作为参数,一个 数组作为实例,然后在
numberOfRowsInSection中返回array.count。此外,您必须在添加新条目之前删除所有条目。 -
numberOfRows 变量是一个 Int,我只是用它来声明它为
numberOfRowsInSection。使用UIRefreshControl拉下 tableView 时正在调用 tableView.reloadData()
标签: ios xcode swift uitableview swifty-json