解析JSON数据后,在表格视图中显示。它第一次工作正常。表格视图单元格有三个按钮(in,out,absent)。当我单击任何按钮时,我可以调用其他JSON API。从JSON获取数据后,我必须更新表视图并使用新数据重新加载,但是当单击任何按钮时,表视图数据会重复。
我如何克服这个问题?这是代码:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell =
tableView.dequeueReusableCell(
withIdentifier: "DetailsCell", for: indexPath) as! AttendanceDetailsTableViewCell
let row = (indexPath as NSIndexPath).row
if(attendanceInfo.count>0){
cell.Class.text = attendance.standard
cell.NameLabel.text = attendance.name
cell.InLabel.text = attendance.inTime
cell.OutLable.text = attendance.outTime
return cell
}
成功后的第二个数据功能:
if(errorCode == "0")
{
self.getAttendances()
}
这是getAttendances()函数:
let task = session.dataTask(with:request,completionHandler:{(d,response,error)in
do{
if let data = d {
if let jsonData = try JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary {
// print("json data ",jsonData)
errorCode = String(describing: jsonData["errorCode"]!)
msg = jsonData["msg"] as! String
if errorCode == "0" {
if let kid_list = jsonData["students"] as? NSArray {
for i in 0 ..< kid_list.count {
if let kid = kid_list[i] as? NSDictionary {
if let store = kid["attendance"] as? NSDictionary
{
self.attendanceInfo.append(AttendanceInfo(
studentId: kid["studentId"] as? String,
name:kid["studentName"] as? String,
classId : kid["classId"] as? String,
standard: ((kid["standard"] as? String)! + " " + (kid["section"] as? String)!),
photo : (imageURL),
school: kid["schoolName"] as? String,
schoolId : "1",
url : self.serverURL,
attendanceDate: AttendanceDate,
inTime : InTime,
outTime: Outtime,
attendance:Attendance,
updatedTime:updateTime,
attendanceId: AttendaceID
)
)
}
}
}
self.do_table_refresh()
}
} else {
self.displayAlert("", message: msg)
}
} else {
self.displayAlert("error")
}
}else {
self.displayAlert("error")
}
} catch let err as NSError {
print("JSON Error \(err)")
}
})
task.resume()
}
func do_table_refresh(){
DispatchQueue.main.async(execute: {
self.activityIndicatorView.stopAnimating()
self.TableView.reloadData()
return
})
}
在数据更新和表重新加载后重复表视图数据。
答案 0 :(得分:0)
您必须在添加新数据之前清除阵列,否则您将始终将项目附加到最后。
在进入循环之前添加self.attendanceInfo.removeAll()
for i in 0 ..< kid_list.count {
...