TableView 在重新加载时显示重复的单元格

TableView shows duplicate cells on reloading

我想显示与从 tableView 中的 datePicker 中选择的特定日期相关的数据。但是,当我重新加载 tableView 时,它会显示重复的单元格。这是我的代码

sessionViewController.swift

import UIKit
class sessionViewController: UIViewController{

@IBOutlet weak var dateLabel: UILabel!
@IBOutlet weak var datePicker: UIDatePicker!

override func viewDidLoad() {
super.viewDidLoad()
    datePicker.datePickerMode = UIDatePickerMode.Date
    datePicker.addTarget(self, action: Selector("datePickerChanged:"), forControlEvents: UIControlEvents.ValueChanged)

    let date = NSDate()
    let formatter = NSDateFormatter()
    formatter.dateFormat = "M/d/yyyy"

    let today = formatter.stringFromDate(date)
    dateLabel.text = today


}

func datePickerChanged(datePicker:UIDatePicker) {
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "M/d/yyyy"


    var strDate = dateFormatter.stringFromDate(datePicker.date)
    dateLabel.text = strDate
    Singelton.setTutorDate(strDate)
    NSNotificationCenter.defaultCenter().postNotificationName("load", object: nil)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


}

sessionTableViewController.swift 导入 UIKit

class sessionTableViewController: UITableViewController{
var myData: Array<tutor> = []
var myDummy: Array<String> = []
var date: String!

override func viewDidLoad() {
    super.viewDidLoad()
    println("\(myData)")

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "loadList:",name:"load", object: nil)

    date = Singelton.getTutorDate()
    myDummy = ["Harsh","Akash","A","B","C","d","e","f","g","h","i","j","k","l","m","n"]
    let cond = AWSDynamoDBCondition()
    let v1    = AWSDynamoDBAttributeValue(); v1.S = date
    cond.comparisonOperator = AWSDynamoDBComparisonOperator.EQ
    cond.attributeValueList = [ v1 ]



    let exp = AWSDynamoDBScanExpression()
    exp.scanFilter = [ "startDate" : cond ]


    self.scan(exp).continueWithSuccessBlock({ (task: AWSTask!) -> AWSTask! in
        NSLog("Scan multiple values - success")
        let results = task.result as! AWSDynamoDBPaginatedOutput
        for r in results.items {


            let myItem: secondItem = r as! secondItem

            let myTutor: tutor = tutor()

            myTutor.setName(myItem.name)
            myTutor.seteMail(myItem.email)
            myTutor.setStartDate(myItem.startDate)
            myTutor.setStartTime(myItem.startTime)
            myTutor.setEndTime(myItem.endTime)
            println(myItem.name)

            self.myData.append(myTutor)
            println("\(self.myData)")

        }
        dispatch_async(dispatch_get_main_queue(), {
            self.tableView.reloadData()
        });
        return nil
    })
}

func loadList(notification: NSNotification){
    //load data here
   // myData.removeAll(keepCapacity: false)
    self.myData.removeAll(keepCapacity: false)
    self.viewDidLoad()
}



func scan(expression : AWSDynamoDBScanExpression) -> AWSTask! {

    let mapper = AWSDynamoDBObjectMapper.defaultDynamoDBObjectMapper()
    return mapper.scan(secondItem.self, expression: expression)
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    // #warning Potentially incomplete method implementation.
    // Return the number of sections.
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete method implementation.
    // Return the number of rows in the section.
    return myData.count

}


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cellID: String = "cell1"
    var cell = tableView.dequeueReusableCellWithIdentifier(cellID) as! timeCell

 //   cell.separatorInset = UIEdgeInsetsZero
//    cell.nameTutor.text = self.myData[indexPath.row].getName() as String
    cell.nameTutor.text = self.myData[indexPath.row].getName() as String
    cell.timeLabel.text = self.myData[indexPath.row].getstartDate() as String
    cell.hourLabel.text = "\(self.myData[indexPath.row].getStartTime())-\(self.myData[indexPath.row].getendTime())"
    return cell
}



override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    let indexPath = tableView.indexPathForSelectedRow();
    println("\(indexPath?.row)")


}

以下是截图。当我从 datePicker 更改日期时,tableView 会重新加载但单元格会重复。

如果有人能建议我出路,那将是一个很大的帮助。谢谢 }

您永远不需要手动调用 ViewDidLoad。让框架调用视图生命周期事件。

将填充 myData 数组的代码移到单独的方法中。从 ViewDidLoad 调用此方法代替当前逻辑。然后在您的 loadData method 中再次调用此方法以重新填充您的列表并重新加载 table 数据。