2009-11-23 11 views
5

Mam bazę danych zdarzeń załadowaną do danych podstawowych, która ma zduplikowane tytuły zdarzeń. Zostało to zrobione, aby baza danych mogła dostarczyć unikalnych informacji dla każdego dnia wydarzenia. Np. Wahania cen w poszczególnych dniach.Sortowanie danych podstawowych za pomocą predykatu w celu wyeliminowania duplikatów

Teraz muszę usunąć zduplikowane tytuły zdarzeń z listy, która będzie wyświetlana jako widok tabeli za pomocą NSFetchRequest i NSPredicate w celu zapewnienia filtru. Jednak wszystkie przykłady, które widziałem, wymagają użycia wartości klucza dynamicznego jako celu dla filtra predykatów. Np. NSDate zapewnia teraz czas jako filtr klucza i działa.

Obecnie tytuł NSString * dotyczy wartości w klasie ManagedObject zdarzeń, która zwraca wartość zerową. Oto wycinek z 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

sam problem tutaj. –

Odpowiedz

4

Można ustawić

setReturnsDistinctResults:YES 

na fetchRequest.

uzyskać więcej informacji, zobacz docs: NSFetchRequest Class Reference

+1

Dziękujemy za opinię. Niestety na tym etapie dostarczył więcej problemów niż rozwiązań. Wyniki, o ile mogę powiedzieć, muszą być zwrócone jako NSDictionary, więc tracę część funkcji zwracanych jako zarządzane obiekty. to znaczy. Dane mają również związek z innym podmiotem o nazwie "Kategoria", o którym wcześniej nie wspominałem, z apologiami. Definiuje sekcje każdego zdarzenia. – Jim

Powiązane problemy