2009-11-23 57 views
5

我有一個事件數據庫加載到具有重複事件標題的核心數據中。這樣做是爲了使數據庫能夠爲事件的每一天提供獨特的信息。例如每個日期的價格波動。使用謂詞對核心數據進行排序以消除重複項

我現在需要從列表中刪除重複的事件標題,該列表將顯示爲NSFetchRequest和NSPredicate的表視圖以提供過濾器。但是我所見過的所有示例都需要一個無動態鍵值才能用作謂詞過濾器的目標。例如NSDate下面提供現在的時間作爲關鍵過濾器,它的工作原理。

當前NSString *標題的目標是事件ManagedObject類中返回一個零值的值。這是來自FetchResultsController的剪輯。

- (NSFetchedResultsController *)fetchedResultsController { 
    if (fetchedResultsController == nil) { 
     NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease]; 
     NSPredicate *predicate = [[[NSPredicate alloc] init] autorelease]; 
     [fetchRequest setReturnsObjectsAsFaults:NO]; 
     [fetchRequest setEntity:[NSEntityDescription entityForName:@"Event" inManagedObjectContext:managedObjectContext]]; 
     NSArray *sortDescriptors = nil; 
     NSString *sectionNameKeyPath = nil; 
     NSDate *date = [NSDate date]; 
     NSString *title = [events title]; 
     if ([fetchSectioningControl selectedSegmentIndex] == 1) { 
      predicate = [NSPredicate predicateWithFormat:@"(closeDate >= %@) AND (title == %@)", date, title ]; 
      sortDescriptors = [NSArray arrayWithObjects:[[[NSSortDescriptor alloc] initWithKey:@"category.name" ascending:YES] autorelease], [[[NSSortDescriptor alloc] initWithKey:@"openDate" ascending:YES] autorelease], nil]; 
      sectionNameKeyPath = @"category.name"; 
     } else if ([fetchSectioningControl selectedSegmentIndex] == 0){ 
      predicate = [NSPredicate predicateWithFormat:@"closeDate >= %@", date]; 
      sortDescriptors = [NSArray arrayWithObject:[[[NSSortDescriptor alloc] initWithKey:@"openDate" ascending:YES selector:@selector(compare:)] autorelease]]; 
      sectionNameKeyPath = @"day"; 
     } 
     [fetchRequest setPredicate:predicate]; 
     [fetchRequest setSortDescriptors:sortDescriptors]; 
     fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:sectionNameKeyPath cacheName:@"EventsCache"]; 
    }  
    return fetchedResultsController; 
} 
+1

同樣的問題:

如需更多信息,請參閱該文檔。 – 2010-12-03 16:48:03

回答

4

你可以在你的fetchRequest設置

setReturnsDistinctResults:YES 

。這裏 NSFetchRequest Class Reference

+1

感謝您的反饋。不幸的是,它在這個階段提供了比解決方案更多的問題我所知道的結果需要作爲一個NSDictionary返回,所以我將它們的一些功能作爲託管對象返回。即。這些數據與另一個名爲「類別」的實體之間也有關係,我之前沒有提到這些信息,appologies。它定義了每個事件的部分。 – Jim 2009-11-23 23:49:17