2

Comment親エンティティを持つCoreData エンティティがありますMeasurement

Measurementエンティティには属性measurementDateがあります。

私の Core Data データベースには 200 のCommentレコードがあり、それぞれがmeasurementDate過去 3 年間でさまざまな値を持っています。

measurementDate任意の 2 つの日付の間にあるレコードを取得しようとしています。

まず、私はこれを試しました:

//now fetch a record between 12 and 11 months ago
NSDate *startDate = [AppGlobals dateByAddingMonths:[NSDate date] withMonths:-12];
NSDate *endDate = [AppGlobals dateByAddingMonths:startDate withMonths:1];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(measurementDate >= %@) AND (measurementDate <= %@)", startDate, endDate];

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Comment" inManagedObjectContext:self.context]];
[request setPredicate:predicate];

NSError *error = nil;
NSArray *results = [self.context executeFetchRequest:request error:&error];

しかし、私は0の結果を得ました。

そこで、述語をより単純なものに置き換えてみました。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"measurementDate >= %@", startDate];

これにより、結果の約 3 分の 1 が返されるはずです。しかし、実際には 200 件すべてのレコードが返されます。

オブジェクトの日付をログアウトしましたが、日付が完全に無視されているようです!

私は何を間違っていますか???

親抽象エンティティと関係がありますか?エンティティではなくエンティティMeasurementから取得しているためですか? コードで「プリミティブ データ型のスカラー プロパティ」を使用しているためですか? CommentMeasurement

どんな助けでも大歓迎です。

4

2 に答える 2

5

問題は、管理対象オブジェクトに日付値を割り当てる場所にあると思います。measurementDateがスカラー プロパティとして定義されている場合

@property (nonatomic) NSTimeInterval measurementDate;

NSDate次に、をそれに割り当てます

NSDate *theDate;
obj.measurementDate = [theDate timeIntervalSinceReferenceDate];
于 2013-04-08T17:22:20.330 に答える
0

使用するか使用する必要がありNSDateますNSTimeInterval(実際には であるため、プリミティブdouble)。

それらを混ぜると、簡単に混乱します。基本的に、NSDateオブジェクトは値をラップするクラスです。NSTimeIntervalつまり、doubleそれ以上のものではありません。そしてNSDate、その値を操作するための多くのメソッドを追加します。

ただし、コンパイラは多くの警告を表示するはずでした。

于 2013-04-08T17:27:24.353 に答える