【发布时间】:2015-12-29 15:43:55
【问题描述】:
我在 ViewController 中有一个 TextField + Button + TableView。
项目运行,导入OK。但是我必须重新启动模拟器,TableView 现在显示值了。
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var myArray = [String]()
@IBOutlet weak var txtName: UITextField!
@IBAction func button(sender: AnyObject) {
var delegate: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
var context: NSManagedObjectContext = delegate.managedObjectContext!
var newName = NSEntityDescription.insertNewObjectForEntityForName("Entity", inManagedObjectContext: context) as! NSManagedObject
newName.setValue(txtName.text, forKey: "name")
context.save(nil)
txtName.text = ""
}
@IBOutlet weak var myTableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
var delegate: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
var context: NSManagedObjectContext = delegate.managedObjectContext!
var export = NSFetchRequest(entityName: "Entity")
export.returnsObjectsAsFaults = false
var exportValue = context.executeFetchRequest(export, error: nil)
for ketqua: AnyObject in exportValue! {
myArray.insert((ketqua.valueForKey("name") as! String), atIndex: 0)
}
self.myTableView.delegate = self
self.myTableView.dataSource = self
self.myTableView.registerClass(myCell.self, forCellReuseIdentifier: "Cell")
viewDidAppear(true)
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
myTableView.reloadData()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return myArray.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! myCell
cell.textLabel?.text = myArray[indexPath.row]
return cell
}
}
【问题讨论】:
-
更新
myArray并致电reloadData()。 -
独立于您的问题永远不要调用 viewDidAppear() - 以及所有其他委托方法 - 显式。
-
@vadian 为什么会这样?
-
委托方法由操作系统调用并符合特定顺序。目前该方法调用 super 可能会导致意外行为。
标签: ios swift uitableview xcode6