2 つの NSDate プロパティを持つエンティティがあります。
@property NSDate *startTime;
@property NSDate *endTime;
ポイント イベントと期間イベントの作成に使用します。そのため、ポイント イベントendTime
は nil に等しくなる可能性があります。
そして、制限付きのすべてのエンティティを取得したい: startTime >= minDate && endTime <= maxDate
しかし、NSPredicate は次のようになります。
NSDate *startTime = [[NSUserDefaults standardUserDefaults] objectForKey:@"firstBound"];
NSDate *endTime = [[NSUserDefaults standardUserDefaults] objectForKey:@"secondBound"];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"(startTime >= %@) AND ((endTime <= %@) OR (endTime == nil))",startTime,endTime]];
正しく動作しません。説明します。データベースに保存されているすべてのイベントが 2000 年から 2010 年の範囲にあり、minDate = 1900、maxDate = 1950 でフェッチを行っている場合、データベースからのポイント イベントはすべてこの述語に適合します。endTime フィールドが nil であるためです。フィールド startTime は明らかに minDate よりも大きくなっています。
これを処理する方法はありますか?NSPredicate によって制限されないでください。私はどんな決定にも近づきます。