2017-05-04 26 views
0

データの表示に問題があります。私はhttps://stackoverflow.com/a/39307841/7118403からコードをコピーしました。なぜなら、チェックマークを保存する方法をテストしたいからです。しかし残念ながら私はtableViewにデータを提示することはできません。 "myItems"を印刷しようとすると[tableViewCheckmark.Item]と表示されます。私は解決策を見つけることができないようです。 PS。私はプログラミングの初心者です。前もって感謝します。 UITableViewDataSource方法のuitableviewクラスのデータを取得できませんSwift 3

class Item { 

    let name : String 
    var selected = false 

    init(name: String) { 
     self.name = name 
    } 
} 

class TableViewController: UITableViewController { 

    @IBOutlet var uiTableView: UITableView! 

    var myItems = [Item]() 

    override func viewDidLoad() { 

     uiTableView.reloadData() 

    } 

    override func viewWillAppear(_ animated: Bool) { 

     let item = Item(name:"Foo") 

     myItems.append(item) 
     print(myItems) 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath as IndexPath) 
     let item = myItems[indexPath.row] 
     cell.textLabel!.text = item.name 
     cell.accessoryType = item.selected ? .checkmark : .none 
     cell.selectionStyle = .none 
     cell.tintColor = UIColor.green 

     return cell 
    } 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     saveDefaults() 
    } 

    override func numberOfSections(in tableView: UITableView) -> Int { 
     return myItems.count 
    } 

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     let item = myItems[indexPath.row] 
     item.selected = true 
     tableView.reloadRows(at: [indexPath as IndexPath], with: .none) 
    } 

    func saveDefaults() { 
     let selectedCells = myItems.filter { $0.selected }.map { $0.name } 
     let defaults = UserDefaults.standard 
     defaults.set(selectedCells, forKey:"selectedCells") 
    } 

    func readDefaults() 
    { 
     let defaults = UserDefaults.standard 
     let selectedItems = defaults.stringArray(forKey: "selectedCells")! 
     for item in myItems { 
      item.selected = selectedItems.contains(item.name) 
     } 
     tableView.reloadData() 
    } 
} 

答えて

0

署名はまた、あなたが現在それを削除し、メソッドの下に追加numberOfSections(in:)に配列数を渡しているスウィフト3に変更されます。

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

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath as IndexPath) 
    let item = myItems[indexPath.row] 
    cell.textLabel!.text = item.name 
    cell.accessoryType = item.selected ? .checkmark : .none 
    cell.selectionStyle = .none 
    cell.tintColor = UIColor.green 
    return cell 
} 

override func tableView(tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    let item = myItems[indexPath.row] 
    item.selected = true 
    tableView.reloadRows(at: [indexPath], with: .none) 
} 
関連する問題