我想在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.
}
}
答案 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()
}