1

Core Dataは初めてですが、タイムスタンプ値が最大のレコードをフェッチしようとしています。次のコードでは、最大のTimeStamp値を取得していますが、最大のタイムスタンプ値を持つレコードが必要です。

AppDelegate * appDelegate =(AppDelegate *)[[UIApplicationsharedApplication]デリゲート];

NSManagedObjectContext *context = [appDelegate managedObjectContext];

NSEntityDescription *entity = [NSEntityDescription
                               entityForName:@"EnergyCumulative" inManagedObjectContext:context];


NSFetchRequest *fetchRequest = [[ NSFetchRequest alloc] init];
[fetchRequest setEntity:entity];
NSExpression *keyPathExpression = [NSExpression
                                   expressionForKeyPath:@"TimeStamp"];
NSExpression *ex = [NSExpression expressionForFunction:@"max:" 
                                             arguments:[NSArray arrayWithObject:keyPathExpression]];


NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
[expressionDescription setName:@"AvgReading"];
[expressionDescription setExpression:ex];
[expressionDescription setExpressionResultType:NSStringAttributeType];

[fetchRequest setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];
[fetchRequest setResultType:NSDictionaryResultType];
[fetchRequest setEntity:entity];


NSError *error;  

NSArray *tripArray = [context executeFetchRequest:fetchRequest error:&error];
 NSLog(@"%@",tripArray);  

NSLogで取得しています({AvgReading = 1342704600000;})

元。私は属性ReadingTimeStampを持っているという点でEntity EnergyCumulativeを持っているので、最大のタイムスタンプを持つ読み取りが必要です

4

1 に答える 1

0

あなたのタイプは何TimeStampですか?

の種類を変更

[expressionDescription setExpressionResultType:NSStringAttributeType];

NSDateAttributeType日付型の場合、または数値NSDecimalAttributeTypeの場合。

ところで、あなたは[fetchRequest setEntity:entity];2 回書いています... (まあ、大したことではありません)


編集:

使用できます

[[tripArray objectAtIndex:0] valueForKey:@"AvgReading"];

最大タイムスタンプを取得します。(「@AvgReading」は適切な名前ではないと思いますが、うまく機能します)

( Use NSStringAttributeType?? を使用するだけで最大タイムスタンプを取得できます)

于 2012-07-20T05:34:30.267 に答える