2017-08-22 9 views
0

で文字列フィールドを照会ない:レルムは、私は私のデータソース内のそのような機能を持っている空白

func getAllFood(by type: String) -> [UserFoodInformation] { 
    var findedFood = [UserFoodInformation]() 
    findedFood.append(contentsOf: baseUserFoodDataSource.getAllFood(by: type)) 
    let predicate = NSPredicate(format: "foodType == %@", type) 
    let resultOfSearching = dataBase.objects(AddedUserFood.self).filter(predicate).sorted(byKeyPath: "name") 
    for searchedFood in resultOfSearching { 
     findedFood.append(searchedFood) 
    } 
    return findedFood 
} 

私は空白から成る文字列を照会しようとすると、私は何の結果を持っていないが、私はシンプルなワンに問い合わせる場合単語のパラメータ、すべてうまくいく。何故ですか?複数の単語で構成されるレルム内の文字列フィールドを持つことはできますか?

答えて

2

使用している述語が、foodTypeプロパティがtype文字列と等しいオブジェクトを探しています。プロパティがその文字列と完全に等しいオブジェクトのみが一致します。他の形式のマッチングを実行する場合は、等価演算子以外のものを使用する必要があります。 BEGINSWITH,CONTAINS,ENDSWITHおよびLIKEは、文字列フィールドでRealmがサポートする比較演算子です。

複数の単語で構成されるレルム内の文字列フィールドを使用できますか?

文字列フィールドには、任意の文字列値を入れることができます。サポートされている比較演算子には「単語」という概念がありません。その概念を使用してフィルタリングを行いたい場合は、さらに作業を行う必要があります。

  • 使用CONTAINSそのfoodType特性を与えtypeの文字列を含む任意のオブジェクトを検索する:あなたのユースケースに応じて、私はそれについて移動する方法のカップルを見ることができます。

  • モデルに格納されている構造化データに文字列を解析します。たとえば、foodTypeプロパティの場合は、Stringではなく、List<FoodType>を格納すると意味があります。

は、おそらく他のオプションがありますが、彼らは、それはあなたが共有していませんでしたことを達成しようとしている何であるかの詳細に依存します。

+1

ありがとうございました。私の問題はもっと簡単でした。何らかの理由で私のモデルが0を返すと、自分自身の空白で構成されるフィルタリングパラメータが返されます。私が探していることの一部に間違いがあったようです。 –

関連する問題