2016-05-05 13 views
1

私は多くのアラーム(他のエンティティ)を持つスケジュールと呼ばれるエンティティを持って、私は30未満の将来のアラームを持つスケジュールのみを取得したい。すべての周りの検索私は、そのクエリを取得することではない作品/:カウントクエリコアデータ述語

let predicateFutureAlarms = NSPredicate(format: "(alarms.date > %@)[email protected] < 30", NSDate().timeIntervalSince1970) 

()(lldb時間を実行すると、コンソールに表示され、その変数の初期化に任命上)

答えて

3

は、少なくとも2つの問題があります。

  • "(alarms.date > %@)[email protected] < 30"は有効な述語構文ではありません。
  • %@
  • プレースホルダはオブジェクトを期待するが、NSDate().timeIntervalSince1970は、浮動小数点数あります。

私は現在、それをテストすることはできませんが、このようなものは動作するはずです:

let now = NSDate() 
let predicate = NSPredicate(format: "SUBQUERY(alarms, $a, $a.date > %@)[email protected] < 30", now) 

Scheduleオブジェクトについて、SUBQUERY(...)nowより大きい dateを持っているすべての関連alarmsオブジェクトに評価されます。

述語 構文の一般的な説明については、"Predicate Format String Syntax"を参照してください。 「SUBQUERY」の表現は文書化されていません。 はNSExpression class referenceまたはQuick Explanation of SUBQUERY in NSPredicate Expressionです。

+0

ありがとう!!!それは動作します。この場合、「日付」は実際には浮動小数点なので、%@%fに変更します。 – user1779394

+0

@ user1779394:ようこそ! - 私は 'date'が(もっと適切かもしれない)" Date "属性であると仮定していました。 –