2017-04-12 14 views
0

私はNSOrderedSetであるrelationプロパティarticleを持つモデルカテゴリを持っています。 は今、私は私が書くとSQLで、一定の条件が満たされている記事ですべてのカテゴリを取得したい:1対多のフィルタリングプロパティ

SELECT * 
FROM Category AS cat 
JOIN Article AS art ON art.categoryId = cat.categoryId AND art.gender='m'; 

私が試した:私は次のエラーを取得する

NSPredicate(format: "articles.gender like %@ OR articles.gender = %@", gender.lowercased(), "n") 

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'to-many key not allowed here'

完全なコード:

let ctx = self.Context() 

    var gender = UserDefaults.standard.string(forKey: "gender_preference") ?? "*" 
    if gender.uppercased() == "N" { gender = "*" } 

    // Create Fetch Request 
    let fetchRequest: NSFetchRequest = ArticleCategory.fetchRequest() 
    let predicate = NSPredicate(format: "articles.gender like %@ or articles.gender = %@", gender, "n") 
    fetchRequest.predicate = predicate 

    // sort by name 
    let sort = NSSortDescriptor(key: "name", ascending: true) 
    fetchRequest.sortDescriptors = [sort] 

    do { 

     let result = try ctx.fetch(fetchRequest) 
     return result 

    } catch { 

     print(error) 

    } 

    return [] 

種類よろしく

EDIT:

Model Relationship

+0

「ANY」で試したことがありますか? 'NSPredicate(形式:" ANY articles.gender %% OR articles.gender =%@ "、gender.lowercased()、" n ")' – mat

+0

申し訳ありません。はい、私は試してみましたが、同じものも同じものもありました – Mario

答えて

0

私はそれが特に化合物句で、ALL、ANYのではなく、NONEまたはSOMEをサブクエリを使用しないために、より信頼性の高いです見つけます。どの記事が条件を満たす記事を取得するのは、条件を満たす記事の数が0より大きい場合に取得することです。

let predicate = NSPredicate(format: "SUBQUERY(articles, $a, $a.gender like %@ OR $a.gender == %@)[email protected] > 0", gender, "n") 
+0

クエリがコンパイルされますが、必要なものではありません。私は性別で記事をフィルタリングしたいです。 0件以上の記事を含むカテゴリを取得しない... – Mario

+0

@Marioこの場合、ArticleCategoriesではない記事を取得し、より簡単な述語を使用します。let fetchRequest:NSFetchRequest = Article.fetchRequest() let述語= NSPredicate(形式: "%@または性別=%@"、性別、 "n"のような性別) – pbasdf

関連する問題