前提・実現したいこと
FScalendarを使って、カレンダーアプリを作っています。Realmに保存したイベントと日付をその日付がタップされたらセルにイベントが表示されるようにしたいです。
発生している問題・エラーメッセージ
filterを使わずに、var result = realm.objects(Schedule.self)と書くと全て保存されたデータが(違う日付に保存されたデータも)表示されてしまいます。なので、filterを用いてvar result = realm.objects(Schedule.self).filter("duedate == '(da)'")と書いてみたのですが、何も表示されません。
filter部分が上手くいっていないと思うのですが、どう書いたらいいのかよく分かりません。もし、教えていただけたらありがたいです。ちなみに、Realmの方にはちゃんと保存されています。
該当のソースコード
import UIKit import RealmSwift class ViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var task: UITextField! @IBOutlet weak var goal: UITextField! @IBOutlet weak var duedate: UITextField! var datePicker: UIDatePicker = UIDatePicker() override func viewDidLoad() { super.viewDidLoad() dateselector() task.delegate = self goal.delegate = self duedate.delegate = self let realm = try! Realm() print(Realm.Configuration.defaultConfiguration.fileURL!) } func dateselector () { //ピッカー設定 datePicker.datePickerMode = UIDatePicker.Mode.date datePicker.timeZone = NSTimeZone.local datePicker.locale = Locale(identifier: "ja-JP") //バーの設定 let toolbar = UIToolbar() toolbar.sizeToFit() let flexibleSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) let todaybtn = UIBarButtonItem(title: "今日", style: .plain, target: nil, action: #selector(today)) let donebtn = UIBarButtonItem(title: "完了", style: .done, target: nil, action: #selector(done)) toolbar.setItems([flexibleSpace,todaybtn,donebtn], animated: true) duedate.inputView = datePicker duedate.inputAccessoryView = toolbar } @objc func today() { datePicker.date = Date() let formatter = DateFormatter() formatter.dateFormat = "yyyy年M月dd日" duedate.text = "(formatter.string(from:Date()))" } @objc func done() { duedate.endEditing(true) //日付のフォーマット let formatter = DateFormatter() formatter.dateFormat = "yyyy年M月dd日" duedate.text = "(formatter.string(from: datePicker.date))" } @IBAction func save (_sender:Any){ if task.text!.count > 0 && (goal.text?.count)! > 0 && (duedate.text?.count)! > 0 { let realm = try! Realm() try! realm.write { let rel = [Schedule(value:["task":task.text!,"goal":goal.text!,"duedate":duedate.text!])] realm.add(rel) self.performSegue(withIdentifier: "toCalendar", sender: nil) } } } }
import UIKit import FSCalendar import CalculateCalendarLogic import RealmSwift class CalenderViewController: UIViewController, FSCalendarDelegate, FSCalendarDataSource, UITableViewDelegate, UITableViewDataSource, FSCalendarDelegateAppearance, UIGestureRecognizerDelegate { var CalendarArray = [Schedule]() var selectedText: String? @IBOutlet weak var tableView : UITableView! @IBOutlet weak var calendar : FSCalendar! override func viewDidLoad() { super.viewDidLoad() //tableView.tableFooterView = UIView() calendar.delegate = self calendar.dataSource = self tableView.delegate = self tableView.dataSource = self } override func viewWillAppear(_ animated: Bool) { tableView.reloadData() } //表示する個数 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return CalendarArray.count } //セルがタップされた場合 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { print("(indexPath.row)番目の行が選択されました.") } //表示する内容 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { print(13) //dequeueReusableCellとは、使い回し let cell = tableView.dequeueReusableCell(withIdentifier: "goalCell", for: indexPath) cell.textLabel?.text = CalendarArray[indexPath.row].task return cell } //データ取得 func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) { print("hey there!") let tmpDate = Calendar(identifier: .gregorian) let year = tmpDate.component(.year, from: date) let month = tmpDate.component(.month, from: date) let day = tmpDate.component(.day, from: date) print("(year)/(month)/(day)") let da = "(year)/(month)/(day)" let realm = try! Realm() var result = realm.objects(Schedule.self) //var result = realm.objects(Schedule.self).filter("duedate == '(da)'") CalendarArray.removeAll() for a in result { CalendarArray.append(a) } tableView.reloadData() }
import Foundation import RealmSwift class Schedule: Object { @objc dynamic var task = "" @objc dynamic var goal = "" @objc dynamic var duedate = "" }
補足情報(FW/ツールのバージョンなど)
Xcode version 10.1
Swift version 4.2.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/17 03:33
2019/04/17 03:54
2019/04/17 05:01
2019/04/18 00:35
2019/04/18 00:47
2019/04/18 01:04
2019/04/18 01:10
2019/04/18 02:38
2019/04/18 02:59