1

我對核心數據的實體,這種結構:排序nsfetchedresultscontroller

ID Region SubRegion SubRegionID CellText 
1  Face  Mouth   2    something 
2  Face  Eyes   1    ... 
3  Face  Nose   4    ... 
... 

但我想我的tableview(nsfetchedresultscontroller)排序是這樣的:

內部各部分:細胞ID屬性排序 節在tableView:SubRegion名稱中,但按SubRegionID排序。

我該如何做到這一點?到現在爲止,我這樣做,但我不知道是subregionID到章節標題排序的最佳實踐:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription 
           entityForName:@"DataBase" inManagedObjectContext:context]; 
[fetchRequest setEntity:entity]; 

NSPredicate *requestPredicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"(Region like '%@')", @"Face"]]; 
[fetchRequest setPredicate:requestPredicate]; 

NSSortDescriptor *ID = [[NSSortDescriptor alloc] 
          initWithKey:@"ID" ascending:YES]; 

[fetchRequest setSortDescriptors:[NSArray arrayWithObjects: ID, nil]]; 

[fetchRequest setFetchBatchSize:10]; 

fetchedResultsController = 
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
            managedObjectContext:context sectionNameKeyPath:@"SubRegion" 
               cacheName:nil]; 

fetchedResultsController.delegate = self; 

感謝您的時間!

回答

0

謂詞中有一些冗餘。而不是

NSPredicate *requestPredicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"(Region like '%@')", @"Face"]]; 

應該只是

NSPredicate *requestPredicate = 
    [NSPredicate predicateWithFormat:@"%K == %@", @"Region", @"Face"]; 

它也可能會與您如何設置NSFetchedResultsController做。您應該將sectionNameKeyPath設置爲「SubRegionID」,而不是「SubRegion」。在您的tableView datasource方法titleForSection:中,您應該根據ID返回子區域的名稱。

+0

感謝您的建議。但問題仍然存在於我使用的排序邏輯中。我得到單元格按ID排序,但部分名稱不按SubRegionID排序...我需要按子區域ID排序的面部分區域(部分)和按ID排序的部分中的單元格。你有什麼建議嗎?謝謝! – Samui 2011-12-16 02:41:55

相關問題