2010-05-22 4 views
0

J'ai deux vues de table où l'on navigue à l'autre. Les deux utilisent plus ou moins le même code et utilisent les modèles de conception managedObjectContext et FetchedResultsController pour fournir les données pertinentes pour les deux tables.titleForHeaderInSection ne met pas à jour les informations d'en-tête de section correctement

Mon problème se produit lorsque je navigue de la première à la seconde tableview et lorsque la source de données n'a qu'un seul en-tête/rangée de section à afficher dans la tableview. Je trouve que la source de données ne met pas à jour les informations d'en-tête de section. Il mettra cependant à jour cette information s'il y a plus d'une ligne ou si les données de section ont passé la deuxième tableview.

Ce problème n'est vraiment perceptible que lorsque vous tentez de parcourir une seconde fois les mêmes critères de données à partir d'une ligne différente de la première vue de table. D'une certaine manière, il n'a pas publié les informations de la première tentative et a plutôt utilisé cette information comme un espace réservé. Je peux confirmer que les méthodes de gestion de la mémoire ont été effectuées et que la ligne correspondante en-dessous de l'en-tête de section utilise les données correctes afin que mon managedObjectModel soit transmis correctement.

Est-ce que quelqu'un d'autre a rencontré ce problème?

Mise à jour

C'est le code utilisé dans le premier tableview.

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 

id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section]; 

if ([fetchSectioningControl selectedSegmentIndex] == 2) {  
    return [NSString stringWithFormat:NSLocalizedString(@"%@ - %d events", @"%@ - %d events"), [sectionInfo name], [sectionInfo numberOfObjects]]; 

} else if ([fetchSectioningControl selectedSegmentIndex] == 1) { 
    return [NSString stringWithFormat:NSLocalizedString(@"%@ - %d events", @"%@ - %d events"), [sectionInfo name], [sectionInfo numberOfObjects]]; 

} else { 
    NSString *dates = [self.dateFormatter stringFromDate:date]; 
    NSString *compareDate = [sectionInfo name]; 

    if ([dates isEqualToString:compareDate]) { 
     return [NSString stringWithFormat:@"Today"]; 

    }else { 
     return [sectionInfo name]; 
    } 
} 
} 

C'est le code utilisé dans le second tableview

- (NSString *)tableView:(UITableView *)table titleForHeaderInSection:(NSInteger)section { 

id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section]; 
NSString *dates = [self.dateFormatter stringFromDate:date]; 
NSString *compareDate = [sectionInfo name]; 
if ([dates isEqualToString:compareDate]) { 
    return [NSString stringWithFormat:@"Today"]; 
}else { 
    return [sectionInfo name]; 
} 
} 
+0

Il serait beaucoup plus facile d'identifier le problème si vous avez inclus du code. Pourriez-vous ajouter le code de votre méthode 'tableView: titleForHeaderInSection:' dans votre TableViewDataSources? Si la méthode diffère du tout entre les sources de données pour les deux tables, incluez les deux implémentations. – Endemic

Répondre

0

Je résolu ce problème en fournissant une valeur nulle à cacheName dans la méthode initWithFetchedRequest de mon FetchedResultsController. Une autre recommandation est de supprimer le cache avant l'instanciation NSFetchedResultsController en utilisant la méthode suivante:

+ (void)deleteCacheWithName:(NSString *)name; 

Tout le crédit pour cette réponse doit aller à « Unforgiven » pour une réponse affichée here.

Questions connexes