如何使用ViewDidAppear上的reloadData()刷新UITableView?

时间:2015-03-27 11:16:32

标签: ios uitableview swift

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

这是我的viewcontroller:

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

}

2 个答案:

答案 0 :(得分:4)

您正在重新加载表格,但您没有重新填充remindersArray。请务必在致电NSUserDefaults之前从reloadData重新检索数据。

答案 1 :(得分:-3)

只需添加一个计时器,让“更新”代码块每隔.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()

}