2016-09-13 8 views
1

これは単純な解決策だと思いますが、私は最良のアプローチに固執しています。Query Realmは、特にオブジェクトをリスト内に持つオブジェクトを取得します。

My Realmデータベースは、オブジェクトPOIおよびCATEGORYで作成されています。 POIは、1つまたはCATEGORYの複数のオブジェクトを持つことができますどこ

class POI: Object { 

    dynamic var id:String = "" 
    dynamic var name:String = "" 
    dynamic var visited:Bool = false; 

    let categories = List<CATEGORY>() 

    override static func primaryKey() -> String? 
    { 
     return "id"; 
    } 
} 

後で私が持っているの数POI特定CATEGORYを持っ、およびの数POIを表示する必要があります与えられたカテゴリのboolean visitedはtrueです。

このような何か:

func getAllVisitedPointsWithCategory(idCategory:String) -> Results<POI> { 

} 

func getAllPointsWithCategory(idCategory:String) -> Results<POI>{ 

} 

任意の提案?

答えて

1

これは動作するはずです:

func getAllVisitedPointsWithCategory(idCategory:String) -> [POI] { 
    let containingPOI = getAllPointsWithCategory(idCategory) 

    return containingPOI.filter({ (poi) -> Bool in 
     return poi.visited 
    }) 
} 

func getAllPointsWithCategory(idCategory:String) -> [POI] { 
    let realm = try! Realm() 
    let containingPOI = realm.objects(POI).filter({ (poi) -> Bool in 
     return poi.categories.contains({ (cat) -> Bool in 
      return idCategory == cat.id 
     }) 
    }) 

    return containingPOI 
} 

それは基本的にはデータを照会し、その結果をフィルタリングです。

+0

完璧。ありがとう – DaSilva

0

これは、レルムのクエリエンジンを使用してではなく、スウィフトに個別のオブジェクトをフィルタリングすることにより、より簡潔かつ迅速に行うことができます。

func getAllVisitedPointsWithCategory(idCategory:String) -> Results<POI> { 
    return getAllPointsWithCategory(idCategory).filter("visited = true") 
} 

func getAllPointsWithCategory(idCategory:String) -> Results<POI>{ 
    let realm = try! Realm() 
    return realm.objects(POI.self).filter("ANY categories.id = %@", idCategory) 
} 
関連する問題