代码之家  ›  专栏  ›  技术社区  ›  jbrennan

使用NSFetchedResultsController创建表节

  •  8
  • jbrennan  · 技术社区  · 15 年前

    NSFetchedResultsController UITableViewController . 我正在获取的托管对象的简化版本如下所示(例如:

    Person:
    -(BOOL)hasPet;
    -(BOOL)hasDog;
    

    基本上,我希望我的桌子只显示这些 Person 有宠物的对象。这很简单,我可以使用谓词。现在,对于那些 hasPet == YES ,我想把它们分两部分放在表中,第一部分 hasDog == YES ,第二个是 hasDog == NO

    - (NSFetchedResultsController *)fetchedResultsController {
    if (nil != fetchedResultsController) {
        return fetchedResultsController;
    }
    
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Homework" inManagedObjectContext:managedObjectContext];
    [fetchRequest setEntity:entity];
    
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"hasPet == %@", [NSNumber numberWithBool:YES]];
    [fetchRequest setPredicate:predicate];
    
    NSSortDescriptor *dogDescriptor = [[NSSortDescriptor alloc] initWithKey:@"hasDog" ascending:YES];
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:dogDescriptor, sortDescriptor, nil];
    
    [fetchRequest setSortDescriptors:sortDescriptors];
    
    NSFetchedResultsController *aController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:nil];
    aController.delegate = self;
    self.fetchedResultsController = aController;
    
        // Release things
    
    return fetchedResultsController;
    }
    

    是我需要集中注意力的分类描述符吗?

    1 回复  |  直到 11 年前
        1
  •  15
  •   jbrennan    15 年前

    sectionNameKeyPath (在这种情况下会是 hasDog )在其初始值设定项中。

    但是,有一点需要注意,那就是节名将是 0 & 1 分别,但很容易治愈。