

SwiftのUserDefaultsにおいて

Tab ControllerでつないだListとPostにおいて

PostでUserDefaultsしたdataが再度立ち上げたときにListで表示されません

どうしたらいいでしょうか？

Post

[code]

    import UIKit
    import Foundation
    
    class PostVC: UIViewController {
    
        @IBOutlet weak var textField: UITextField!
    
        var data: [String] = []
    
        let userDefaults = UserDefaults.standard
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            // Do any additional setup after loading the view.
        }
    
        @IBAction func cellAdd(_ sender: Any) {
            guard let list = tabBarController?.viewControllers?[0] as? ListVC else {
                print("Cannot get listVC from tab bar controller")
                return
            }
    
            let postText = textField.text ?? ""
            list.data.insert(postText, at: 0)
    
            userDefaults.set(data, forKey: "DataStore")
    
            userDefaults.synchronize()
    
            list.tableView?.insertRows(at: [IndexPath(row: 0, section: 0)], with: .automatic)
        }
    
    }
    
[/code]

List

[code]

    import UIKit
    
    class ListVC: UIViewController, UITableViewDataSource, UITableViewDelegate {
    
        @IBOutlet weak var tableView: UITableView!
    
        var data: [String] = []
    
        let userDefaults = UserDefaults.standard
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view.
    
            // <TableView初期設定>
            tableView.dataSource = self
            tableView.delegate = self
    
            data = readData()
        }
    
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return data.count
        }
    
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let postcell = tableView.dequeueReusableCell(withIdentifier: "postcell")!
            postcell.textLabel?.text = data[indexPath.row]
            return postcell
        }
    
        func readData() -> [String] {
            let dataArray = userDefaults.array(forKey: "DataStore") as? [String] ?? []
            return dataArray
        }
    
    }
    
[/code]


CC BY-SA 4.0
2020-04-11T19:22:39.337
65546
2020-04-12T02:24:38.277
2020-04-11T22:13:09.217
18540
39481
question
swift xcode uikit
Swift 他画面からのUserDefaults


クラス`PostVC`

[code]

    @IBAction func cellAdd(_ sender: Any) {
        guard let list = tabBarController?.viewControllers?[0] as? ListVC else {
            print("Cannot get listVC from tab bar controller")
            return
        }
    
        let postText = textField.text ?? ""
        list.data.insert(postText, at: 0)
    
        userDefaults.set(list.data, forKey: "DataStore") // data => list.data
    
        userDefaults.synchronize()
    
        list.tableView?.insertRows(at: [IndexPath(row: 0, section: 0)], with: .automatic)
    }
    
[/code]

上のコメントをつけた行を書き換えてください。単純なミスです。


CC BY-SA 4.0
2020-04-12T02:24:38.277
65549
2020-04-12T02:24:38.277
18540
65546
answer