特定の日付より後の日付を取得しようとしています。私の述語は次のとおりです。
NSPredicate(format: "date > \(currentDate)")
フェッチリクエストを実行すると、例外をキャッチしました。
'Unable to parse the format string "date > 2015-07-08 03:00:00 +0000"'
そのようなクエリを作成できると思った。私は何を間違えていますか?
NSPredicate(format:_:)
はフォーマット文字列と引数のリストを取りますが、単純な文字列を渡します。このイニシャライザはパラメータでstringWithFormat:
を呼び出すだけでなく、述語を構築しているときに実際に引数の型情報を調べるため、これは機能しません。
引数として日付を渡すことにより、その初期化子を使用できます。
let datePredicate = NSPredicate(format: "date > %@", currentDate)
Swift 3では、述部が次のように変更されました。
let datePredicate = NSPredicate(format: "date > %@", currentDate as NSDate)
Swift 3、必要に応じて、問題を解決するために次の5つのパターンのいずれかを選択できます。
NSPredicate
を使用する init(format:arguments:)
NSDate
インスタンスで初期化子NSPredicate
には、次の宣言を持つinit(format:arguments:)
という初期化子があります。
_init(format predicateFormat: String, arguments argList: CVaListPointer)
_
引数リストの値をフォーマット文字列に置き換えて結果を解析することにより、新しい述語を作成して返します。
NSDate
と共に使用する場合、以下に示すようにinit(format:arguments:)
を使用してNSPredicate
のインスタンスを設定できます。
_let date = NSDate()
let predicate = NSPredicate(format: "date > %@", date)
_
NSPredicate
を使用する init(format:argumentArray:)
NSDate
インスタンスで初期化子NSPredicate
には、次の宣言を持つinit(format:argumentArray:)
という初期化子があります。
_init(format predicateFormat: String, argumentArray arguments: [Any]?)
_
指定された配列の値をフォーマット文字列に代入して結果を解析することにより、新しい述語を作成して返します。
NSDate
と共に使用する場合、以下に示すようにinit(format:argumentArray:)
を使用してNSPredicate
のインスタンスを設定できます。
_let date = NSDate()
let predicate = NSPredicate(format: "date > %@", argumentArray: [date])
_
NSPredicate
init(format:arguments:)
Date
インスタンスをNSDate
にキャストした初期化子の使用Date
とともに使用する場合、以下に示すようにNSPredicate
インスタンスをDate
にキャストすることにより、NSDate
のインスタンスを設定できます。
_let date = Date()
let predicate = NSPredicate(format: "date > %@", date as NSDate)
_
NSPredicate
init(format:arguments:)
Date
インスタンスをCVarArg
にキャストした初期化子の使用Date
とともに使用する場合、以下に示すようにNSPredicate
インスタンスをDate
にキャストすることにより、CVarArg
のインスタンスを設定できます。
_let date = Date()
let predicate = NSPredicate(format: "date > %@", date as CVarArg)
_
NSPredicate
を使用する init(format:argumentArray:)
Date
インスタンスで初期化子Date
と共に使用する場合、以下に示すようにinit(format:argumentArray:)
を使用してNSPredicate
のインスタンスを設定できます。
_let date = Date()
let predicate = NSPredicate(format: "date > %@", argumentArray: [date])
_