2016-07-13 55 views
0

有沒有辦法在CoreData中查詢NSDate。例如,如果我想要一個實體最高NSDate值?我看到NSExpression「max:」只需要NSNumber查詢核心數據中的最大NSDate

+0

你想從實體最大日期FECH對象? –

回答

1

實際上,你可以問SQL的只是價值,而不是用該值對象:

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"]); 
    } 
} 

更詳細的下抓取管理對象 - >將CoreData文件中抓取特定值。

Perfomed查詢,下令對日場降下來,用setFetchLim它:1。 它不完美,但至少它工作。

0

你可以用

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

您可以直接在SQLite--做到這一點得到它並不獲取一切,然後過濾結果,並且沒有的NSExpression複雜性。

爲了獲得具有最大日一個對象,這樣做(假設實體名稱Entity和日期屬性timeStamp):

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

不要抓取。你會得到(最多)一個結果,這將是具有最大日期的實例。

如果要得到公正的日期,而不是整個管理對象,這樣做之前添加此抓取:

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