2013-01-18 78 views
0

我有一個名爲messages的複雜對象的NSSet。每封郵件都有一個屬性dateCreated使用對象過濾NSSet以獲取具有最大屬性值的對象

我只是試圖以有效的方式獲取消息與最大dateCreated

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

我認爲它的錯誤的方式,要求的最大值和比對選擇正確的消息循環。

也許這有助於我的對象來自Core Data?有任何想法嗎?

+0

如果您使用的是核心數據,請按創建的日期排序運行提取請求,然後選擇第一項。 –

回答

2

如果您使用的是核心數據,則應運行一個提取請求,按創建的日期進行排序,然後返回第一個項目。此代碼是未經測試,但它應該是這樣的:因爲您是通過對象需要循環反正

- (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

謝謝!我不知道,我可以再次使用獲取對象的上下文。大! –

2

,只需使用快速列舉:

// 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; 
} 
0

如果你只是有一個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]; 
} 
相關問題