2012-06-08 3 views
1

Je fais une vue comme l'iPhone Calendar ListView. J'utilise des données de base et obtenir des rendez-vous et les regrouper par date.Ajouter une section vide à NSFetchedResultsController

Cependant, tout comme dans la liste d'iPhone, j'ai besoin d'ajouter une section vide pour aujourd'hui, même s'il n'y a pas de rendez-vous. Je ne peux pas comprendre comment faire cela pour une section sans rendez-vous puisque je fais le tri avant de créer le groupe.

Comment est-ce que j'ajouterais une section vide au NSFetchedResultsController et l'aurais-je eu pour que la date d'aujourd'hui soit au bon endroit et pas à la fin de la liste?

- (NSFetchedResultsController *)fetchedResultsController { 

    /* 
    Set up the fetched results controller. 
    */ 
    // Create the fetch request for the entity. 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    // Edit the entity name as appropriate. 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Appointments" inManagedObjectContext:[[CoreDataHelper sharedInstance] managedObjectContext]]; 
    [fetchRequest setEntity:entity]; 
    //[fetchRequest setIncludesPendingChanges:YES]; 

    // Set the batch size to a suitable number. 
    //[fetchRequest setFetchBatchSize:20]; 

    // Sort using the date/then time property. 
    NSSortDescriptor *sortDescriptorDate = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES]; 
    NSSortDescriptor *sortDescriptorTime = [[NSSortDescriptor alloc] initWithKey:@"start_time" ascending:YES selector:@selector(localizedStandardCompare:)]; 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptorDate, sortDescriptorTime, nil]; 


    [fetchRequest setSortDescriptors:sortDescriptors]; 

    // Use the sectionIdentifier property to group into sections. 
    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[[CoreDataHelper sharedInstance] managedObjectContext] sectionNameKeyPath:@"date" cacheName:nil]; 
    aFetchedResultsController.delegate = self; 
    self.fetchedResultsController = aFetchedResultsController; 
    return fetchedResultsController; 
} 

Répondre

3

Vous ne pouvez pas avoir des sections vides avec NSFetchedResultsController - c'est juste la façon dont il est conçu pour le moment, et je l'appellerais une limitation :)

Ce problème a été rencontré et traité par un Timothy Armes qui a créé une classe TAFetchedResultsController, qui permet des sections vides. C'est un remplacement pour NSFetchedResultsController. Il vous permet également de trier vos sections sur des champs qui ne sont pas le nom de la section (très pratique)

Cependant, vous devrez apporter des modifications à votre modèle de base de données - ce n'est pas vraiment une perte de remplacement.

https://github.com/timothyarmes/TAFetchedResultsController

Mais il ne fonctionne, et résoudre votre problème si vous êtes prêt à refaire votre modèle de données. J'espère que cela aide :)

+0

Je ne sais pas comment cela peut m'aider. Étant donné que je crée les sections en fonction de l'objet date de l'élément, je ne suis pas sûr de savoir comment l'implémenter sans modifier tout mon schéma. En utilisant cela, j'ai l'impression que j'aurais besoin des articles et des sections envoyés séparément. – Bot

+0

OK - J'ai mis à jour ma réponse pour être plus concis. Le fait est, vous ne pouvez pas avoir une section vide avec 'NSFetchedResultsController' - mauvaises nouvelles j'ai peur. Cependant, il ne devrait pas être trop compliqué de réajuster votre modèle de données pour vous permettre d'utiliser la classe 'TAFetchedResultsController'. Vous auriez juste besoin de créer des objets de section pour chaque jour (1 à 31 je présume) et créer une relation avec vos objets de rendez-vous. Tim a un code d'exemple là-bas qui est facile à suivre. Je pense que tu seras capable de réaliser ce que tu veux. J'espère que cela t'aides. – Stretch

Questions connexes