滚动swift时重复uitableview数据

时间:2017-07-11 18:33:26

标签: ios swift uitableview

解析JSON数据后,在表格视图中显示。它第一次工作正常。表格视图单元格有三个按钮(in,out,absent)。当我单击任何按钮时,我可以调用其他JSON API。从JSON获取数据后,我必须更新表视图并使用新数据重新加载,但是当单击任何按钮时,表视图数据会重复。

enter image description here

我如何克服这个问题?这是代码:

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
    })
}

在数据更新和表重新加载后重复表视图数据。

1 个答案:

答案 0 :(得分:0)

您必须在添加新数据之前清除阵列,否则您将始终将项目附加到最后。

在进入循环之前添加self.attendanceInfo.removeAll()

for i in 0 ..< kid_list.count { ...