1

Core Data ストアに対して MagicalRecord を使用するために、次の述語を作成しました。

//  format the date correctly
NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];
[dateFormat setDateFormat:@"yyyy-MM-dd*"];  //  HH:mm
NSString *formattedDate = [dateFormat stringFromDate:currentlySelectedDate];

NSString *stringPredicate = [NSMutableString stringWithFormat:
                             @"aPosX >= %f AND aPosX < %f AND %f > aPosY AND %f <= (aPosY + aPosH) AND aStartTime LIKE %@",
                             [staffIndex floatValue], [staffIndex floatValue] + 218, touchPoint.y, touchPoint.y, formattedDate];

NSPredicate *predicate =  ([NSPredicate predicateWithFormat: stringPredicate]);

最後のステートメントでクラッシュし、次のエラーが発生します。

*捕捉されなかった例外 'NSInvalidArgumentException' が原因でアプリを終了します。 *"'

私が知っていることはすべて試し、GoogleとSOを検索しましたが、なぜ失敗するのかまだわかりません...誰かが私に教えてもらえますか?

4

1 に答える 1

3

フォーマット文字列を作成しないでください。述語フォーマット作成メソッドを使用してください。

predicateWithFormat:

これにより、述語は適切と思われる形式パラメーターを処理できます (必要に応じて引用符を追加します)。

日付については、述語を変更して範囲を使用する必要があります。日付のみを直接確認して時刻を無視することはできないため、次のように言う必要があります。

date > startOfDay AND date < endOfDay

startOfDayとはNSDateendOfDayインスタンスです (おそらく を使用して作成されますNSDateComponents)。

于 2013-05-08T23:59:52.323 に答える