Ios TableView没有';t视图值

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

我在ViewController中有一个文本字段+按钮+表格视图

项目运行,导入确定。但我必须重新启动模拟器,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
}  

}

我对你的代码做了一些修改,这应该对你有用。正如瓦迪安提到的,您不应该自己调用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设置如何?