2009-11-23 14 views
5

Yinelenen Olay başlıklarına sahip olan Çekirdek Veriler'e yüklenmiş bir Olay veritabanım var. Bu, veritabanının etkinliğin her günü için benzersiz bilgi sağlayabilmesi için yapılmıştır. Her bir tarihte fiyatlandırmada dalgalanmalar.Yinelenen verileri ortadan kaldırmak için Temel Verileri Sırayla Sınıflandırılıyor

Şimdi yinelenen olay başlıklarını, filtreyi sağlamak için NSFetchRequest ve NSPredicate ile tablo görünümü olarak görüntülenecek bir listeden kaldırmam gerekiyor. Ancak, gördüğüm tüm örnekler, yüklem filtresi için hedef olarak kullanılacak hiçbir dinamik anahtar değeri gerektirmiyor. Örneğin, NSDate'in altında şimdi bir anahtar filtre olarak zaman sağlar ve çalışır.

Şu anda NSString * başlığı, bir nil değeri döndüren ManagedObject sınıfındaki olaylarda bir değeri hedefler. İşte FetchResultsController gelen bir keskin nişancı.

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

aynı sorunu burada. –

cevap

4

Sen fetchRequest üzerinde

setReturnsDistinctResults:YES 

ayarlayabilirsiniz.

fazlası için, docs bkz: NSFetchRequest Class Reference

+1

Geri bildiriminiz için teşekkür ederiz. Ne yazık ki bu aşamada çözümlerden daha fazla sorun yaratıyor. Anlayabildiğim kadarıyla sonuçlar bir NSDictionary olarak geri döndürülmeli, bu yüzden bazılarının işlevlerini yönetilen nesneler olarak döndürdüm. yani. Veriler, daha önce bahsetmediğim “Kategori” adı verilen bir başka varlık ile de ilişki içerisindedir. Her olayın bölümlerini tanımlar. – Jim