2009-11-23 2 views
5

У меня есть база данных событий, загружаемая в базовые данные, которая имеет дубликаты заголовков событий. Это сделано так, чтобы база данных могла предоставлять уникальную информацию для каждого дня мероприятия. Например, колебания цен на каждую дату.Сортировка основных данных с предикатом для устранения дубликатов

Теперь мне нужно удалить дубликаты названий событий из списка, который будет отображаться в виде таблицы с помощью NSFetchRequest и NSPredicate для предоставления фильтра. Но все примеры, которые я видел, не требуют использования значения динамического ключа в качестве цели для предикатного фильтра. например, ниже NSDate предоставляет время сейчас как ключевой фильтр, и он работает.

В настоящее время заголовок NSString * задает значение в классе ManagedObject, возвращающем значение nil. Вот отрезок от 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

Та же проблема здесь. –

ответ

4

Вы можете установить

setReturnsDistinctResults:YES 

на вашем fetchRequest.

Более подробно см документацию: NSFetchRequest Class Reference

+1

Благодарим за отзыв. К сожалению, на данном этапе у него появилось больше проблем, чем решений. Результаты, насколько я могу судить, должны быть возвращены как NSDictionary, поэтому я теряю часть функциональности, возвращаемую ими как управляемые объекты. то есть. Данные также имеют отношение к другому объекту под названием «Категория», о котором я раньше не упоминал, а также об узорах. Он определяет разделы каждого события. – Jim

Смежные вопросы