Uitableview tableView.reloadData()不工作

Uitableview tableView.reloadData()不工作,uitableview,swift2,reloaddata,Uitableview,Swift2,Reloaddata,我正在制作一个应用程序来跟踪我的作业,由于某些原因,当我调用reloadData时,它不起作用,一些人已经问过这个问题,但我尝试了这些修复,它们对我不起作用,下面是我添加新作业的文件: import UIKit class AddHomework : UIViewController { @IBOutlet weak var HomeworkNameLbl: UILabel! @IBOutlet weak var HomeworkNameTxt: UITextField!

我正在制作一个应用程序来跟踪我的作业,由于某些原因,当我调用reloadData时,它不起作用,一些人已经问过这个问题,但我尝试了这些修复,它们对我不起作用,下面是我添加新作业的文件:

import UIKit
class AddHomework : UIViewController {
     @IBOutlet weak var HomeworkNameLbl: UILabel!
     @IBOutlet weak var HomeworkNameTxt: UITextField!
     @IBOutlet weak var DueDateLbl: UILabel!
     @IBOutlet weak var DueDateTxt: UITextField!
     @IBOutlet weak var DueTimeLbl: UILabel!
     @IBOutlet weak var DueTimeTxt: UITextField!
     @IBOutlet weak var AddHomeworkBtn: UIButton!
     override func viewDidLoad() {
         super.viewDidLoad()
         self.hideKeyboardWhenTappedAround()
     }
     @IBAction func AddHomework(sender: UIButton) {
         let HomeworkName = HomeworkNameTxt.text
         let DueDate = DueDateTxt.text
         let DueTime = DueTimeTxt.text


         homeworkTableView().AddObject([DueDate!, DueTime!],    HomeworkName: HomeworkName!)


}
func hideKeyboardWhenTappedAround() {5
    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
    view.addGestureRecognizer(tap)
}

func dismissKeyboard() {
    view.endEditing(true)
}


}
这是我的tableview所在的文件:

     import UIKit
     class homeworkTableView: UIViewController, UITableViewDelegate,    UITableViewDataSource{
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
    super.viewDidLoad()
    self.tableView.reloadData()
}
var homework : [String: [String]] = [
    "Spanish Test": ["Aug 12", "12:00 AM", "Spanish"],
    "Math Sheet": ["Aug 13", "10:30 PM","Math"],
    "Code Thing": ["Aug 11","12:00 AM","Coding"]

]


var titles = [
    "Spanish Test", "Math Sheet", "Code Thing"
]

func AddObject(newArray: [String], HomeworkName: String){
    titles.append(HomeworkName)
    homework.updateValue(newArray, forKey: HomeworkName)

    print(homework)
    print(titles)
}


 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return titles.count
}

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let Cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomCell

    Cell.Title.text = titles[indexPath.row]
    let currentTitle = titles[indexPath.row]
    let current = homework[currentTitle]!
    Cell.DueDate.text = "Due Date: \(current[0])"
    Cell.Class.text = "Due Time: \(current[1])"

    self.tableView.rowHeight = 100.00

    return Cell
}

}
整个项目发布在git上,如下所示:


非常感谢您的帮助,谢谢

您需要执行在视图中执行的操作。在视图中加载将显示。viewDidLoad仅在启动时调用,因此尽管更改了数据,但视图从不更改其自身的本地数据,因此在调用reloadData时,它仍然使用旧数据


摘自。

以下是一些基于代码的指针

第一:
您只需在
viewDidLoad()
中调用一次
-reloadData()

第二:
如果要查看所做的更改,必须按以下顺序进行
更新-dataSource
>
-reloadData()

从你的代码

func AddObject(newArray: [String], HomeworkName: String){
    titles.append(HomeworkName)
    homework.updateValue(newArray, forKey: HomeworkName)

    // check is changes was made
    print(homework) 
    print(titles)  

    // reload after updating datasource
    self.tableView.reloadData() 
}
编辑: 在检查了你的项目后,我必须说你的方法与我的想法不同。。 在
viewDidLoad()
中调用
-reloadData()
一次是正确的,但问题在于 表
数据源
,在
文件.swift中更新,更新人:

homeworkTableView().AddObject([DueDate!, DueTime!], HomeworkName: HomeworkName!)
您初始化了
homeworkTableView
类,并在该类中添加或追加了数据 但是从navigationController显示
homeworkTableView
viewController时,您是 演示新建
家庭作业表视图
类(不是更新的家庭作业表视图)

调用self.tableView.reloadData()
说明:

致命错误:在展开可选值时意外发现nil

因为更新期间,
self.tableView
nil

以下是我提出的解决方案:

第一:
全球化您的数据源以进行跨类更新,如下所示:

import Foundation
import UIKit

// I just moved your variables outside the class
//
var homework : [String: [String]] = [
    "Spanish Test": ["Aug 12", "12:00 AM", "Spanish"],
    "Math Sheet": ["Aug 13", "10:30 PM","Math"],
    "Code Thing": ["Aug 11","12:00 AM","Coding"]

]

var titles = [
    "Spanish Test", "Math Sheet", "Code Thing"
]

class homeworkTableView: UIViewController, UITableViewDelegate, UITableViewDataSource{ 
    ...
    // codes
    ...
}
第二:
删除
self.tableView.reloadData()
func AddObject(..
,我以前建议过(不知道您的方法/实现), 比如:


似乎您没有上载带有最新ChangeStack reload()离开ViewDiDLoad()的项目。我已尝试此操作,但似乎不起作用,我将在进入计算机后重试。它显示致命错误:在展开可选值时意外发现nil我知道这通常意味着我的一个值类似于可选值(…)但我想我用!打开了所有这些,我会更新我的git存储库,如果你能看一下,并给我留下一条评论,那将是great@DavidRichardson;太好了!你的回购协议。虽然在git中没有该项目。奇怪的是,由于某种原因,我的回购协议中的所有文件都被删除了,我明天会尝试修复它,但由于某种原因,我有很多一般来说,上传到存储库很麻烦,谢谢你耐心等待我!
func AddObject(newArray: [String], HomeworkName: String){
    titles.append(HomeworkName)
    homework.updateValue(newArray, forKey: HomeworkName)

    // check is changes was made
    print(homework) 
    print(titles)
}