使用对象过滤NSSet以获取具有最大属性值的对象

问题描述:

我有一个名为messages的复杂对象的NSSet。每封邮件都有一个属性dateCreated使用对象过滤NSSet以获取具有最大属性值的对象

我只是试图以有效的方式获取消息与最大dateCreated

我仍然可以通过使用KVC最大日期: NSDate *d = [messages valueForKeyPath:@"@max.dateCreated"];

我认为它的错误的方式,要求的最大值和比对选择正确的消息循环。

也许这有助于我的对象来自Core Data?有任何想法吗?

+0

如果您使用的是核心数据,请按创建的日期排序运行提取请求,然后选择第一项。 –

如果您使用的是核心数据,则应运行一个提取请求,按创建的日期进行排序,然后返回第一个项目。此代码是未经测试,但它应该是这样的:因为您是通过对象需要循环反正

- (MyEntity *)newestMyEntityInContext:(NSManagedObjectContext *)context 
{ 
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"entity"]; 
    [request setSortDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"dateCreated" 
                   ascending:NO]]]; 
    [request setFetchLimit:1]; 

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

    if (!results) { 
     NSLog(@"%@", error); 
     return nil; 
    } 

    return results.count ? results[0] : nil; 
} 
+0

谢谢!我不知道,我可以再次使用获取对象的上下文。大! –

,只需使用快速列举:

// Find the object with the maximum value for dateCreated 
// Of course, replace both NSObject's with the appropriate class 
NSObject *maxObject; 
for (NSObject *object in messages) 
{ 
    if ([object.dateCreated laterDate:maxObject.dateCreated])) 
     maxObject = object; 
} 

如果你只是有一个NSSet中和不要使用CoreData,以下方法有效:

NSSortDescriptor *dateDescriptor = [[NSSortDescriptor alloc] initWithKey:@"dateCreated" ascending:YES]; 
NSArray *sortDescriptors = @[ dateDescriptor ]; 
NSArray *sortedArray = [messages sortedArrayUsingDescriptors:sortDescriptors]; 

if (sortedArray.count>0) 
{ 
    id oldestMessage = [sortedArray firstObject]; 
    id newestMessage = [sortedArray lastObject]; 
}