質問編集履歴

1 Todoを追加するコードを追加しました

Kohei_

Kohei_ score 11

2018/11/12 23:03  投稿

SwiftでのTodoリストのエラー
SwiftでのTodoリストのエラー(tableViewのセルを削除など)
### 前提・実現したいこと
SwiftでTodoリストを作っていて、このサイト([Swiftで簡単なTODOアプリを作ってみよう](https://qiita.com/TD3P/items/8f474358d1dd789557f3))を参考にしながら作っているのですが、以下2つの問題が起きています。
### 発生している問題・エラーメッセージ
① +で追加したTodoがtableViewに表示されずtableViewを引き下げて更新しても出てこず、アプリを再起動(ホームボタン2度押ししてからの上へスワイプ)すると、tableViewに先ほど追加したTodoがある
②右から左にスワイプして削除しようとしても削除しようとするとアプリが固まるか、クラッシュする
### 該当のソースコード
```Swift
//ViewControllerです  
import UIKit
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
   @IBOutlet weak var tableView: UITableView!
   
   func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
       return TodoKobetsunonakami.count
   }
   
   func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
       let TodoCell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier : "TodoCell",for: indexPath)
       
       TodoCell.textLabel!.text = TodoKobetsunonakami[indexPath.row]
       
       return TodoCell
   }
   
   override func viewDidLoad() {
       super.viewDidLoad()
       
       if UserDefaults.standard.object(forKey: "TodoList") != nil {
           TodoKobetsunonakami = UserDefaults.standard.object(forKey: "TodoList") as! [String]
       }
       //引っ張って更新
       let refreshControl = UIRefreshControl()
       refreshControl.addTarget(self, action: #selector(ViewController.refreshControlValueChanged(sender:)), for: .valueChanged)
   tableView.addSubview(refreshControl)
   }
   
   @objc func refreshControlValueChanged(sender: UIRefreshControl) {
       DispatchQueue.main.asyncAfter(deadline: .now() + 1, execute: {
           sender.endRefreshing()
       })
   }
   
   //スワイプで削除
   func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
       if editingStyle == .delete {
           tableView.deleteRows(at: [indexPath], with: .fade)
       }
   }
   
}
```
```Swift  
//AddControllerです  
import UIKit  
//変数の設置  
var TodoKobetsunonakami = [String]()  
 
class AddController: UIViewController {  
     
   //テキストフィールドの設定  
   @IBOutlet weak var TodoTextField: UITextField!  
     
   //追加ボタンの設定  
   @IBAction func TodoAddButten(_ sender: Any) {  
       //変数に入力内容を入れる  
       TodoKobetsunonakami.append(TodoTextField.text!)  
       //追加ボタンを押したらフィールドを空にする  
       TodoTextField.text = ""  
       //変数の中身をUDに追加  
       UserDefaults.standard.set( TodoKobetsunonakami, forKey: "TodoList" )  
   }  
     
   //最初からあるコード  
   override func viewDidLoad() {  
       super.viewDidLoad()  
   }  
     
   //最初からあるコード  
   override func didReceiveMemoryWarning() {  
       super.didReceiveMemoryWarning()  
   }  
}  
 
```  
### 補足情報(FW/ツールのバージョンなど)
Swift4
Xcode10
です。御回答よろしくお願い申し上げます🤲
  • iOS

    7300 questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • Xcode

    8365 questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • Swift

    14459 questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • iPhone

    1766 questions

    iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る