0

我有一個Events實體三個部分:NSFetchedController:顯示第無序

Upcoming 
Today  
Past  

這裏是FRC設定:

- (NSFetchedResultsController *)fetchedResultsController 
{ 
    if(_fetchedResultsController!=nil) 
    { 
     return _fetchedResultsController; 
    } 

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" 
               inManagedObjectContext:self.managedObjectContext]; 
    [fetchRequest setEntity:entity]; 

    NSSortDescriptor *firstSort = [[NSSortDescriptor alloc] initWithKey:@"modified" 
                   ascending:NO]; 
    NSArray *sortDescriptors = [[NSArray alloc]initWithObjects:firstSort, nil]; 
    [fetchRequest setSortDescriptors:sortDescriptors]; 

    self.fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:fetchRequest 
                     managedObjectContext:self.managedObjectContext 
                     sectionNameKeyPath:@"sectionIdentifier" 
                        cacheName:nil]; 
    self.fetchedResultsController.delegate = self; 
    return self.fetchedResultsController; 
} 

使用瞬態特性的實體,我設置了的部分爲:

- (NSString *)sectionIdentifier 
{  
    [self willAccessValueForKey:@"sectionIdentifier"]; 
    NSString *tmp = [self primitiveSectionIdentifier]; 
    [self didAccessValueForKey:@"sectionIdentifier"]; 

    if (!tmp) 
    { 
     NSDate *dateToCompare = [self getUTCFormateDate:[self modified]]; 
     NSCalendar* calendar = [NSCalendar currentCalendar]; 
     NSDate* now = [NSDate date]; 
     NSDateFormatter *format = [[NSDateFormatter alloc] init]; 
     format.dateFormat = @"dd-MM-yyyy"; 
     NSString *stringDate = [format stringFromDate:now]; 
     NSDate *todaysDate = [format dateFromString:stringDate]; 

     NSUInteger differenceInDays = 
     [calendar ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit forDate:dateToCompare] - 
     [calendar ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit forDate:todaysDate]; 


     NSString *sectionString; 

     switch (differenceInDays) { 
      case -1: 
       sectionString = @"Past"; 
       break; 
      case 0: 
       sectionString = @"Today"; 
       break; 
      case 1: 
       sectionString = @"Upcoming"; 
       break; 
      } 

     tmp = sectionString; 
     [self setPrimitiveSectionIdentifier:tmp]; 
    } 

    return tmp; 
} 

目前sections出現在descending訂單,其中Upcoming是第一個,然後Today,然後Past。我想先顯示Today的部分。

如何以下列順序顯示部分?

節0:Today

第1部分:Upcoming

第2部分:Past

+1

你必須添加一個排序鍵,例如0到今天1到即將到來,2到過去,然後按該鍵排序 – Volker

+0

謝謝!爲了澄清,我添加了另一個臨時密鑰「sectionOrder」,就像我添加了sectionIdentifier一樣,並將Today = 0;即將到來= 1;過去= 2?我用這個鍵作爲firstSort? sectionNameKeyPath是否保持不變? - – user1107173

回答

1

控制順序的唯一的事情就是你有那種描述:

NSSortDescriptor *firstSort = [[NSSortDescriptor alloc] initWithKey:@"modified" 
                  ascending:NO]; 

所以你需要改變這一點。您可以使其升序,但是您會描述與日期沒有直接關聯的排序順序。

因爲您描述的內容取決於當前日期,因此您需要進行一些修改,以便將訂單信息永久存儲在模型中,並且每日更新。然後,您可以將其添加爲您的第一個排序描述符以使用該描述符,並在每個節內保留現有的排序描述符進行排序。

您需要存儲的信息是來自@Volker的評論,每個部分都有一個簡單的索引編號。

+0

謝謝!爲了澄清,我添加了另一個臨時密鑰「sectionOrder」,就像我添加了sectionIdentifier一樣,並將Today = 0;即將到來= 1;過去= 2?我用這個鍵作爲firstSort? sectionNameKeyPath是否保持不變? – user1107173

+0

它需要持久才能用於排序。瞬態僅用於區段顯示名稱(並保持不變)。 – Wain

+0

如果調用持久屬性,比方說,「sectionOrder」,我將如何爲今日,即將到來和過去分配值? – user1107173