70668
以下のコードでTableViewにセルが追加されません

```

    class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
        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
        }
        
    
        var postMainArray = [String]()
        var data: [String] = []
        
        @IBOutlet weak var postText: UITextField!
        @IBOutlet weak var postTableView: UITableView!
        
        override func viewDidLoad() {
            super.viewDidLoad()
        }
        
        @IBAction func postButton(_ sender: Any) {
            self.data.insert(postText.text!, at: 0)
            postTableView.beginUpdates()
            postTableView.endUpdates()
            postText.text = ""
        }
        
    }
    
```
CC BY-SA 4.0
2020-09-24T07:14:33.750
70662
2020-09-25T02:05:40.423
2020-09-25T02:05:40.423
39481
39481
question
swift uikit
TableViewに表示されない
> Call this method if you want subsequent insertions, deletion, and selection
> operations (for example, cellForRow(at:) and indexPathsForVisibleRows) to be
> animated simultaneously.

<https://developer.apple.com/documentation/uikit/uitableview/1614908-beginupdates>

`beginUpdates()`と`endUpdates()`は上記の通り、テーブルビューに対して`insertRows(at:with:)`や`deleteRows(at:with:)`を複数回呼び出したときの変更をまとめて結果的にキレイにアニメーションさせるためのものなので、間でinsertRowsなどを呼ばなかったら何も起こりません（厳密には高さの更新とかできるのですが今回は関係ない）。

テーブルビューのデータを更新したいのであれば、`beginUpdates()`と`endUpdates()`を呼んでいるところで、その代わりに`reloadData()`を呼んでください。

（追加削除をキレイにアニメーションしたい場合は`beginUpdates()`と`endUpdates()`の間でinsertRowsなどをモデルデータの変更に合致するように呼びますが、整合性を保つのは難しいので今の段階では簡単に`reloadData()`を呼んでください）
CC BY-SA 4.0
2020-09-24T10:07:55.707
70668
2020-09-24T10:07:55.707
5519
70662
answer