Realmでfilterの検索条件に変数を利用するには
Realmを利用する際、filter()
メソッドで検索条件を指定したいのですが指定したい値を前の画面からセグエで受け取り、その値を使いたい場合はどうしたらいいのでしょうか。受け取ったメンバ変数を直接filter()
に入力してもシュミレータは立ち上がるのですが、その画面に行くとエラーが出てしまいます。受け取ったメンバ変数をfilter()
に入力し、反映させるにはどうしたらいいのでしょうか。また、データはString
型のテキストです。
データモデル
class ToDo: Object {
dynamic var category = ""
dynamic var color = ""
dynamic var season = ""
dynamic var brand = ""
dynamic private var _image: UIImage? = nil
}
前の画面
class tableView: UIViewController,UITableViewDataSource,UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
//SecondViewに渡す文字列
var selectedText: String?
let texts = ["トップス", "ジャケット・アウター", "パンツ", "スカート", "ワンピース", "バッグ", "シューズ","ファッション雑貨"]
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "Cell")
cell.textLabel?.text = texts[indexPath.row]
return cell
}
func tableView(table: UITableView, didSelectRowAtIndexPath indexPath:NSIndexPath)
selectedText = texts[indexPath.row]
performSegueWithIdentifier("showSecondView",sender: nil)
// Segueで遷移時の処理
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if (segue.identifier == "showSecondView") {
let secondVC: SecondView = (segue.destinationViewController as?SecondView)!
secondVC.text = selectedText
}
}
}
現在の画面
class SecondView: UIViewController, UITableViewDelegate, UITableViewDataSource {
//tableviewからデータを受け取る
var text:String!
let toDoItems = try! Realm().objects(ToDo).filter("category == 'トップス'")
}
この時、filter()
を手動的に'トップス'で指定すると、category="トップス"
で登録されてるデータがずらっとSecondViewのテーブルビューに表示されるのですが、トップスと入力してる部分を前のページで押した値(ジャケット・アウター、パンツ、スカート...)を反映させたいと思っています。
データベースも触ったばかりで、ネットを見ても情報が少ないためこのやり方が正しいのか、他に良い方法があるのか、可能か不可能かわからないことが多くて困っております。
もちろんこの方法以外にも良い方法があればぜひ教えていただきたいです。
try! Realm().objects(ToDo).filter("category == 受け取ったデータ")