2016-07-13 10 views
0

Gibt es eine Möglichkeit NSDate in CoreData abzufragen. Zum Beispiel, wenn ich eine Entität mit dem höchstenNSDate Wert möchte? Ich sehe, dass NSExpression "max:" nimmt nur eine NSNumber.Max NSDate in Kerndaten abfragen

+0

Sie fech Objekt mit max Datum aus einer Einheit wollen? –

Antwort

1

Sie können SQL tatsächlich fragen nur für diesen Wert, nicht das Objekt mit diesem Wert:

NSExpression *date = [NSExpression expressionForKeyPath:@"date"]; 
NSExpression *maxDate = [NSExpression expressionForFunction:@"max:" 
                arguments:[NSArray arrayWithObject:maxDate]]; 
NSExpressionDescription *d = [[[NSExpressionDescription alloc] init] autorelease]; 
[d setName:@"maxDate"]; 
[d setExpression:maxSalaryExpression]; 
[d setExpressionResultType:NSDateAttributeType]; 

[request setPropertiesToFetch:[NSArray arrayWithObject:d]]; 

NSError *error = nil; 
NSArray *objects = [managedObjectContext executeFetchRequest:request error:&error]; 
if (objects == nil) { 
    // Handle the error. 
} else { 
    if (0 < [objects count]) { 
     NSLog(@"Maximum date: %@", [[objects objectAtIndex:0] valueForKey:@"maxDate"]); 
    } 
} 

genauer unter Abrufen von Managed Objects -> Fetching Spezifische Werte in der Dokumentation Coredata.

oder

Parfümmarkt eine Abfrage, bestellt am Feld Datum DESCENDING und mit setFetchLim es: 1. Es ist nicht perfekt, aber zumindest hat es funktioniert.

0

Sie können es mit

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"tablename"]; 

fetchRequest.fetchLimit = 1; 
fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"yourDate" ascending:NO]]; 

NSError *error = nil; 

id person = [managedObjectContext executeFetchRequest:fetchRequest error:&error].firstObject; 
0

erhalten Sie können dies in SQLite-- direkt tun, ohne alles zu holen und dann filtert das Ergebnis, und ohne die Komplexität NSExpression.

Um das ein Objekt zu erhalten, das den max Datum hat, so etwas wie (Entitätsname Entity und Datum Attribut timeStamp vorausgesetzt):

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Event"]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"timeStamp = [email protected]"]; 
fetchRequest.predicate = predicate; 

die holen Sie. Sie erhalten (höchstens) ein Ergebnis, das die Instanz mit dem maximalen Datum ist.

Wenn Sie nur das Datum zu bekommen und nicht das gesamte verwaltete Objekt, fügen Sie diese, bevor Sie die holen:

fetchRequest.resultType = NSDictionaryResultType; 
fetchRequest.propertiesToFetch = @[ @"timeStamp" ];