如何在ViewDidPear上使用reloadData()刷新UITableView



我想在ViewDidPappear上重新加载UITableView中的数据,并用NSUserDefaults中的新数据填充表。我知道在表中填充新信息时一切都正常,因为当我关闭和再次打开模拟器时,新数据就在那里。但我希望每次显示视图时都用新数据刷新。这是一个提醒应用程序。

这是我的视图控制器:

class FirstViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    @IBOutlet var reminderTableView: UITableView!
    var remindersArray = NSUserDefaults.standardUserDefaults().objectForKey("remindersArray")! as AnyObject as [String]
    let textCellIdentifier = "reminderText"
    override func viewDidLoad() {
        super.viewDidLoad()
        reminderTableView.delegate = self
        reminderTableView.dataSource = self
    }
    override func viewDidAppear(animated: Bool) {
        dispatch_async(dispatch_get_main_queue()) {
            self.reminderTableView.reloadData()
        }
    }
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return remindersArray.count
    }
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(textCellIdentifier, forIndexPath: indexPath) as UITableViewCell
        let row = indexPath.row
        cell.textLabel?.text = remindersArray[row]
        return cell
    }
}

我不知道为什么viewWillAppear中的函数没有重新加载表中的数据。任何帮助都将不胜感激。我在stackoverflow上尝试过其他解决方案,但不幸的是,这些方案都不适用。

编辑

这是第二个视图控制器,它更新了remindersArray:

import UIKit
class SecondViewController: UIViewController, UITextFieldDelegate {
    @IBOutlet var reminderText: UITextField!
    @IBAction func addReminder(sender: AnyObject) {
        let newReminderText = reminderText.text
        var nsRemindersArray = NSUserDefaults.standardUserDefaults().objectForKey("remindersArray")! as NSArray
        var remindersArray = nsRemindersArray as AnyObject as [String]
        remindersArray.append(newReminderText)
        NSUserDefaults.standardUserDefaults().setObject(remindersArray, forKey: "remindersArray")
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        self.reminderText.delegate = self
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }   
}

您正在重新加载表,但没有重新填充remindersArray。在调用reloadData之前,请记住从NSUserDefaults重新检索数据。

只需添加一个计时器,使"更新"代码块每0.4秒重复一次。。。

Override func viewDidLoad() {
super.viewDidLoad
self.starttimer()
}

func starttimer(){
 var timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: Selector("update"), userInfo: nil, repeats: true)
}
func update() {
    // update your data
self.tableview.reloadData()
}

最新更新