swift
1import UIKit 2import RealmSwift 3 4extension UIColor { 5 class func rgb(r: Int, g: Int, b: Int, alpha: CGFloat) -> UIColor{ 6 return UIColor(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: alpha) 7 } 8} 9 10class TopViewViewController: UIViewController,UITableViewDataSource,UITableViewDelegate { 11 12 13 @IBOutlet weak var TopViewTabelView: UITableView! 14 let ToDo = TopTodo() 15 var todoItem: Results<TopTodo>! 16 17 18 override func viewDidLoad() { 19 super.viewDidLoad() 20 21 // 永続化されているデータを取りだす 22 do{ 23 let realm = try Realm() 24 self.todoItem = realm.objects(TopTodo.self) 25 self.TopViewTabelView.reloadData() 26 }catch{ 27 28 } 29 30 navigationController?.navigationBar.prefersLargeTitles = true //これがやりたかった設定やメモ帳のナビゲーションの可変のやつ 31 navigationItem.title = "データベース" 32 TopViewTabelView.tableFooterView = UIView(frame: .zero) 33 self.view.backgroundColor = UIColor.rgb(r: 250, g: 204, b: 125, alpha: 1) 34 TopViewTabelView.frame = CGRect(x: 0, y: 64, width: 375, height: 667) 35 36 } 37 38 39 40 41 @IBAction func addBtr(_ sender: Any) { 42 let alert = UIAlertController(title: "タイトル", message: "メッセージ", preferredStyle: .alert) 43 44 // OKボタンの設定 45 let okAction = UIAlertAction(title: "OK", style: .default, handler: { 46 (action:UIAlertAction!) -> Void in 47 48 // OKを押した時入力されていたテキストを表示 49 if let textFields = alert.textFields { 50 51 // アラートに含まれるすべてのテキストフィールドを調べる 52 for textField in textFields { 53 //self.item.insert(textField.text!, at: 0) 54 55 let newTodo = self.ToDo 56 do{ 57 let realm = try Realm() 58 try realm.write({ () -> Void in 59 realm.add(newTodo) 60 print("ToDo Saved") 61 self.ToDo.item.append(textField.text!) 62 self.TopViewTabelView.insertRows(at: [IndexPath(row: 0, section: 0)],with: UITableViewRowAnimation.automatic) 63 print(textField.text!) 64 }) 65 }catch{ 66 print("Save is Faild") 67 } 68 } 69 self.TopViewTabelView.reloadData() 70 } 71 }) 72 alert.addAction(okAction) 73 74 // キャンセルボタンの設定 75 let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) 76 alert.addAction(cancelAction) 77 78 // テキストフィールドを追加 79 alert.addTextField(configurationHandler: {(textField: UITextField!) -> Void in 80 textField.placeholder = "テキスト" 81 }) 82 alert.view.setNeedsLayout() // シミュレータの種類によっては、これがないと警告が発生 83 84 self.present(alert, animated: true, completion: nil) 85 } 86 87 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 88 return todoItem.count 89 } 90 91 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 92 let Cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 93 /*let now = NSDate() // 現在日時の取得 94 95 let dateFormatter = DateFormatter() 96 dateFormatter.locale = NSLocale(localeIdentifier: "en_US") as Locale? // ロケールの設定 97 dateFormatter.dateFormat = "yyyy年MM月dd日 HH:mm"//:ss" // 日付フォーマットの設定 98 99 let dateString = dateFormatter.string(from: now as Date) 100 print(dateString) // -> 2014/06/25 02:13:18*/ 101 102 let object = todoItem[indexPath.row] 103 Cell.textLabel?.text = object.item 104 Cell.textLabel?.textAlignment = NSTextAlignment.center 105 /*Cell.detailTextLabel?.text = dateString 106 Cell.detailTextLabel?.textAlignment = NSTextAlignment.right*/ 107 return Cell 108 } 109 110 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 111 112 113 if(editingStyle == UITableViewCellEditingStyle.delete) { 114 do{ 115 let realm = try Realm() 116 try realm.write { 117 realm.delete(self.todoItem[indexPath.row]) 118 } 119 TopViewTabelView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.fade) 120 }catch{ 121 } 122 TopViewTabelView.reloadData() 123 } 124 } 125 126 127 128 override func didReceiveMemoryWarning() { 129 super.didReceiveMemoryWarning() 130 // Dispose of any resources that can be recreated. 131 } 132 133}
swift
1import RealmSwift 2 3class TopTodo: Object{ 4 @objc dynamic var item = "" 5}
実現したいこと
tableViewに追加したデータを永続的に保存したい。
困っていること
現状ではtableViewにalertでデータを追加しているのですが一つしかデータを追加できなくて困っています。2つ目を追加しようとボタンをタップすると落ちていまう。(理由が分からない)
また、todoの一覧部分の永続保存の処理までは一応出来たが遷移先のtableViewのデータの保存の仕方が分からなくて困っている。(labelなど複雑な処理がある為)
gitに上げているので見て頂けると分かりやすいと思います。
https://github.com/haruka22/new-project
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/06/21 04:50
退会済みユーザー
2018/06/24 18:05
退会済みユーザー
2018/07/10 17:41
退会済みユーザー
2018/08/04 14:24