Ios TableView没有';t视图值
我在ViewController中有一个文本字段+按钮+表格视图 项目运行,导入确定。但我必须重新启动模拟器,TableView现在显示值Ios TableView没有';t视图值,ios,swift,uitableview,xcode6,Ios,Swift,Uitableview,Xcode6,我在ViewController中有一个文本字段+按钮+表格视图 项目运行,导入确定。但我必须重新启动模拟器,TableView现在显示值 class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { var myArray = [String]() @IBOutlet weak var txtName: UITextField! @IBAction func button(send
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
}
}
我对你的代码做了一些修改,这应该对你有用。正如瓦迪安提到的,您不应该自己调用viewdidappease()
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var myArray = [String]()
private var delegate: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
@IBOutlet private weak var txtName: UITextField!
@IBOutlet private weak var myTableView: UITableView!
@IBAction func button(sender: AnyObject) {
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 = ""
}
override func viewDidLoad() {
super.viewDidLoad()
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.registerClass(myCell.self, forCellReuseIdentifier: "Cell")
myTableView.delegate = self
myTableView.dataSource = self
myTableView.reloadData()
}
// MARK: - UITableViewDataSource
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
}
}
问题是,在数据结构获取信息/数据之后,您应该调用
reloadData()
,在将数据插入数组之后
override func viewDidLoad() {
super.viewDidLoad()
myTableView.delegate = self
getMydata() //<-- call the function here
}
func getMydata()
{
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)
}
myTableView.reloadData()
// and if you want use dispatch to get to main_queue again
}
override func viewDidLoad(){
super.viewDidLoad()
myTableView.delegate=self
getMydata()//更新myArray
并调用reloadData()
。与您的问题无关,永远不要调用ViewDidAspect()–和所有其他委托方法–显式。@vadian这是为什么?委托方法由操作系统调用并符合特定顺序。在方法调用super时,它可能会导致意外行为。这将导致{exportValue.count}-调用reloadData的次数会经常导致不必要的重新加载表格!@Christian'fuzi'Orgler我的编辑没有通过这就是为什么,为什么你否定了帖子你发布的无效代码。你没有设置数据源,这会导致其他人尝试它,然后出现另一个问题。你也经常调用reloadData。编辑你的问题并我很乐意扭转我的否定。(也许你也这么做,因为我不明白为什么我的代码会失败?)Hix Hix。这不起作用………我仍然必须重新启动TableView模拟器……然后我认为您的设置有问题。您能对此发表更多见解吗?您如何呈现它,您的插座连接了吗,一切都不是零,您的UI设置如何?