2016-08-16 25 views
-1

私は宿題を追跡するためのアプリケーションを作成していますが、reloadDataを呼び出すと何らかの理由でそれがうまくいかず、何人かの人がすでにこれについて尋ねていますが、彼らは私のために動作しません、ここで私は新しい宿題を追加ファイルされる:tableView.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) 
} 


} 

ここでは、私は私のテーブルビューを持っているファイルです。

 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のに掲示されてここ: https://github.com/IndyBob2019/HomeworkHelper

ご協力いただきありがとうございます!

+0

あなたが最新の変更でプロジェクトをアップロードしていないようだ –

+0

(リロードを取る):
は(あなたのアプローチ/実装の知識がなくても)、のような は前に私が提案しfunc AddObject(..内部self.tableView.reloadData()を削除しますViewDiDLoadの() –

答えて

0

viewWillAppearでviewDidLoadで行うことを行う必要があります。 viewDidLoadは起動時にのみ呼び出されるため、データの変更にもかかわらず、ビューは独自のローカルデータを変更しないため、reloadDataを呼び出すと古いデータが使用されます。

出所:tableView reloadData does not work。ここで

0

まず、あなたのコードから基づいて、いくつかのポインタです:
あなただけのセカンド..一度viewDidLoad()

-reloadData()を呼び出している:あなたが行った変更を確認したい場合には、
この順序でなければならない。Update your -dataSource>-reloadData()

ex。あなたのコード...

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()を呼び出す呼び出すと、正しい ..私は心の中で持っているものから、あなたのアプローチが異なることを言うが、しなければなりませんあなたはデータのウィットをhomeworkTableViewクラスを初期化して、コメントを追加または追加

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

:問題がでFile.swift内で更新されたあなたの テーブルdataSourceですあなたのクラスは ですが、 を提示すると、新しいhomeworkTableViewクラスです(更新された宿題テーブルはありません)..あなたは012Contactから viewControllerを提示すると、self.tableView.reloadData()を呼び出す

は言う:

fatal error: unexpectedly found nil while unwrapping an Optional value

self.tableViewはここで、更新の時間の間に私が作ったソリューション

nilだったので:

まず:
Cross class更新のためのあなたのdataSourceのグローバル化、ように:

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 
    ... 
} 

第二:

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

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

私はこれを試して、それは動作していないようだ、私は私のコンピュータにアクセスするときに再試行します。 –

+0

致命的なエラー:予期せず、アンラッピング中にnilが見つかりました。オプション値 –

+0

私は通常、自分の値の1つがオプション(...)のようなものだと知っていますが、私はそれらをすべてアンラップしたと思いました!あなたはそれを見て、私に偉大なコメントを残すことができます –

関連する問題