ボールドテキスト### 前提・実現したいこと
質問
swiftで、tableviewで記録画面を作成し、view controllerのnavigationTitleに現在の日付を表示させています。
さらに、navigationBarItemに[前日],[翌日]というボタンを配置し、タップすることにより、日付の操作ができるようにして、日付ごとに、realmで記録されたデータを管理したいのですが、日付の操作で詰まってしまいました。
現在の日付が基準になっているのか、前日ボタンをタップすると、現在日の1日前の
日付が表示されますが、再度タップしてもそれ以上前の日付は表示されません。
また、現在日より前の日付が表示された状態で、翌日ボタンをタップしても、現在日が表示されずに、現在の1日後の日付が表示されてしまいます。
初学者故説明が下手なのはご容赦ください。
アドバイスお願い致します。
発生している問題・エラーメッセージ
エラーなし
swift
1 2import UIKit 3import RealmSwift 4 5class RecordViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UINavigationControllerDelegate { 6 7 8 @IBOutlet var babyNameLabel: UINavigationItem! 9 10 @IBOutlet var tableView: UITableView! 11 12 @IBOutlet var labelToday: UINavigationItem! 13 14 @IBOutlet var yesterdayLabel: UIBarButtonItem! 15 16 @IBOutlet var tomorrowLabel: UIBarButtonItem! 17 18 19 var todoItems: Results<Record>! 20 21 override func viewDidLoad() { 22 super.viewDidLoad() 23 24 self.tableView.dataSource = self 25 self.tableView.delegate = self 26 27 let realm = try! Realm() 28 todoItems = realm.objects(Record.self) 29 tableView.reloadData() 30 31 32 labelToday.title = getToday() 33 34 print(Realm.Configuration.defaultConfiguration.fileURL!) 35 36 tableView.register(UINib(nibName: "TableViewCell", bundle: nil),forCellReuseIdentifier:"RecordCell") 37 38 } 39 40 @IBAction func buttonYesterday(_ sender: Any) { 41 labelToday.title = getYesterday() 42 } 43 44 @IBAction func buttonTomorrow(_ sender: Any) { 45 labelToday.title = getTomorrow() 46 } 47 48 49 @IBAction func wakeUpButton(_ sender: Any) { 50 51 let record = Record() 52 record.title = "起きる" 53 record.nowTime = getTime() 54 record.buttonImage = UIImage(named: "smile") 55 record.save() 56 57 //インスタンス取得 58 let realm = try! Realm() 59 60 try! realm.write { 61 realm.add(record) 62 } 63 self.tableView.reloadData() 64 65 } 66 67 @IBAction func sleepButton(_ sender: Any) { 68 69 let record = Record() 70 record.title = "寝る" 71 record.nowTime = getTime() 72 record.buttonImage = UIImage(named: "sleep") 73 record.save() 74 75 //インスタンス取得 76 let realm = try! Realm() 77 78 try! realm.write { 79 realm.add(record) 80 } 81 self.tableView.reloadData() 82 83 } 84 85 @IBAction func peepButton(_ sender: Any) { 86 87 let record = Record() 88 record.title = "うんち" 89 record.nowTime = getTime() 90 record.buttonImage = UIImage(named: "peep") 91 record.save() 92 93 //インスタンス取得 94 let realm = try! Realm() 95 96 try! realm.write { 97 realm.add(record) 98 } 99 self.tableView.reloadData() 100 101 } 102 103 @IBAction func urineButton(_ sender: Any) { 104 105 let record = Record() 106 record.title = "おしっこ" 107 record.nowTime = getTime() 108 record.buttonImage = UIImage(named: "diapers") 109 record.save() 110 111 //インスタンス取得 112 let realm = try! Realm() 113 114 try! realm.write { 115 realm.add(record) 116 } 117 self.tableView.reloadData() 118 119 } 120 121 @IBAction func milkButton(_ sender: Any) { 122 123 let record = Record() 124 record.title = "ミルク" 125 record.nowTime = getTime() 126 record.buttonImage = UIImage(named: "milk") 127 record.save() 128 129 //インスタンス取得 130 let realm = try! Realm() 131 132 try! realm.write { 133 realm.add(record) 134 } 135 self.tableView.reloadData() 136 137 } 138 139 @IBAction func feedButton(_ sender: Any) { 140 141 let record = Record() 142 record.title = "授乳" 143 record.nowTime = getTime() 144 record.buttonImage = UIImage(named: "breastfeed") 145 record.save() 146 147 //インスタンス取得 148 let realm = try! Realm() 149 150 try! realm.write { 151 realm.add(record) 152 } 153 self.tableView.reloadData() 154 155 } 156 157 158 159//画面が表示される前に実行される処理 160 override func viewWillAppear(_ animated: Bool) { 161 super.viewWillAppear(animated) 162 tableView.reloadData() 163 } 164 165 166//セル数宣言 167 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 168 169 let realm = try! Realm() 170 let records = realm.objects(Record.self) 171 return todoItems.count 172 } 173 174 175//セル表示 176 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 177 let cell = tableView.dequeueReusableCell(withIdentifier: "RecordCell", for: indexPath) as! TableViewCell 178 179 let realm = try! Realm() 180 let records = realm.objects(Record.self) 181 let object = todoItems[indexPath.row] 182 cell.bindData(text: object.title, label: object.nowTime, image: object.buttonImage!) 183 184// cell.setCell(record: records[indexPath.row]) 185 186 return cell 187 } 188 189 190 191 192 func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { 193 return true 194 } 195 196 197 198 199 func tableView(_ tableView: UITableView,commit editingStyle: UITableViewCell.EditingStyle,forRowAt indexPath: IndexPath) { 200 if editingStyle == .delete{ 201 let realm = try! Realm() 202 let records = realm.objects(Record.self) 203 let object = todoItems[indexPath.row] 204 205 try! realm.write{ 206 realm.delete(records) 207 } 208 209 tableView.deleteRows(at: [indexPath], with: .fade) 210 } 211 } 212 213 214 func deleteTodo(Index: Int){ 215 let realm = try! Realm() 216 try! realm.write{ 217 realm.delete(todoItems[Index]) 218 } 219 220 } 221 222 223//現時刻取得 224 func getToday() -> String{ 225 226 let f = DateFormatter() 227 f.dateStyle = .full 228 f.timeStyle = .none 229 f.locale = Locale(identifier: "ja_JP") 230 let now = Date() 231 return f.string(from: now) 232 } 233 234 func getTime() -> String{ 235 236 let f = DateFormatter() 237 f.dateStyle = .none 238 f.timeStyle = .short 239 f.locale = Locale(identifier: "ja_JP") 240 let now = Date() 241 return f.string(from: now) 242 } 243 244 func getYesterday() -> String{ 245 246 let f = DateFormatter() 247 f.dateStyle = .full 248 f.timeStyle = .none 249 f.locale = Locale(identifier: "ja_JP") 250 _ = Date() 251 let yesterday = Date(timeIntervalSinceNow: 60 * 60 * -24) 252 return f.string(from: yesterday) 253 } 254 255 func getTomorrow() -> String{ 256 257 let f = DateFormatter() 258 f.dateStyle = .full 259 f.timeStyle = .none 260 f.locale = Locale(identifier: "ja_JP") 261 _ = Date() 262 let tomorrow = Date(timeIntervalSinceNow: 60 * 60 * 24) 263 return f.string(from: tomorrow) 264 } 265 266 267} 268
試したこと
realm公式リファレンスや、キータの記事を参考に実装してみましたが意図した挙動になりません。
補足情報(FW/ツールのバージョンなど)```ここに言語を入力
コード
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/12 09:27
2020/01/12 09:51
2020/01/12 10:07
2020/01/14 03:35
2020/01/14 03:54
2020/01/14 04:57
2020/01/14 05:42
2020/01/14 06:52