2016-11-30 6 views
0

それらの結果に基づいて使用される複数のフィルタを使用することは可能ですか?iOS分野if else文に基づく複数のフィルタ

名前に基づいて大学のコースのリストをフィルタリングし、フィルタされたコースのリストが> 0であるかどうかをチェックしたいと思います。

override func viewDidLoad() { 

     if let courseName = GetCourseName(){ 
      let predicate = NSPredicate(format: "name contains %@", courseName) 
      courses = try! RealmManager.realm().objects(Course.self).filter(predicate).sorted("name") 
      token = try! RealmManager.realm().objects(Course.self).filter(predicate).addNotificationBlock({ changes in 
       self.tableView.reloadData() 
      }) 

      self.navigationItem.rightBarButtonItems = [UIBarButtonItem(title: "Show all", style: .Plain, target: self, action: #selector(showAll(_:)))] 

     }else{ 
      courses = try! RealmManager.realm().objects(Course.self).sorted("name") 
      token = try! RealmManager.realm().objects(Course.self).addNotificationBlock({ changes in 
       self.tableView.reloadData() 
      }) 
     } 
    } 

func showAll(sender:AnyObject) 
    { 
     courses = try! RealmManager.realm().objects(Course.self).sorted("name") 
     token = try! RealmManager.realm().objects(Course.self).addNotificationBlock({ changes in 
      self.tableView.reloadData() 
     }) 

     self.navigationItem.rightBarButtonItems?.removeAll() 
    } 

答えて

1

このような何かが動作するはずのようですね:

これは、ユーザーにビューが空の場合は、すべて表示するボタンを与え、イムは、今やっものです。基本的に、コース名がある場合、フィルタリングされた結果にコースを設定します。次に、コースがゼロまたは空の場合は、すべてを表示するように設定します。

override func viewDidLoad() { 
    if let courseName = GetCourseName(){ 
     let predicate = NSPredicate(format: "name contains %@", courseName) 
     courses = try! RealmManager.realm().objects(Course.self).filter(predicate).sorted("name") 
    } 

    if course == nil || course.isEmpty { 
     courses = try! RealmManager.realm().objects(Course.self).sorted("name") 
    } 

    token = courses.addNotificationBlock({ changes in 
     self.tableView.reloadData() 
    }) 
} 
+0

解決策を使用しました。しかし、私はすべてをトークンブロックに入れます。これは、ユーザーがビューにナビゲートするたびに新しいデータを取得するためです。 course == nilは、viewDidLoadメソッドでは常にtrueです。 –

関連する問題