J'ai actuellement une option permettant à un utilisateur de modifier l'ordre d'affichage d'une catégorie dans mon application iPhone.
Je souhaite section de la vue Tableau à l'aide d'un NsfetchedResultSluStroller afin que les titres de section soient la "catégorie.name". Commandé par "catégorie.displayordorder" où "catégorie" a une relation d'une personne avec l'entité que je cherche. La seule façon dont je peux obtenir la section de la section pour fonctionner correctement consiste à utiliser "catégorie.displayordorder" comme titre de section. P> Toutes idées sur la façon dont je peux nommer le titre de la section quelque chose Différents puis la propriété que je trie avec? p> p>
4 Réponses :
Je ne sais pas si je comprends votre question complètement, mais je fais quelque chose de similaire dans mon application et voici comment je l'obtiens au travail:
Tout d'abord, la méthode FetchedResultSholler, où j'ai défini les descriptions de tri et les prédicats en fonction de ce que je J'essaie de faire. Dans ce cas, je veux trier les titres de film par date de sortie, puis par nom. Puis, avec mon prédicat, je saisie des entités d'un «type» spécifique et dans une certaine plage de «relaines». P>
dans ma définition de FetchResultScontroller, vous définissez la sectionNameNyPathe sur "Remundiated" afin que mes en-têtes de section soient basés sur une date. p> puis dans ma table présente des méthodes de déléguement de la source de données, je retourne le titre réel pour chaque en-tête après avoir transformé mon NSString (rappelez-vous que vous devez retourner nstring pour Un titre d'en-tête de TableView. p> Donc, si je voulais modifier la façon dont mes données sont affichées pour être organisées par titlename, par exemple, je modifierais mon objet FetchedResultSluStRoller à: p> et modifier ma tableView: TitleforaderInSection: Méthode source de données Pour simplement renvoyer le nom de Titlename (qui est déjà une chaîne): p> - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
return [[[self.fetchedResultsController sections] objectAtIndex:section] name];
}
J'essaie de trier mes sections par écran (Nsinteger), mais au lieu d'afficher l'entier comme titre de section, je souhaite afficher le nom qui correspond à cet affichage. Donc, au lieu d'avoir des titres de section 1, 2 et 3, j'aurais "Prénom", "Deuxième nom" et "Troisième nom". Pensez-vous que le meilleur moyen est de déterminer le titre basé sur l'ordre d'affichage dans TitleforHeaderInsection?
C'est la seule voie aussi loin que je sache. Vous pouvez effectuer un commutateur sur écran, puis renvoyer la section correspondante que vous souhaitez afficher.
J'espérais que je n'aurais pas besoin d'accomplir une autre extraction au titre de TitledorheaderInsection, mais cela ne semble pas être autre chose ...
Merci à Rog, j'ai pu envelopper ma tête autour de ce problème et proposer une solution. Ce n'est pas aussi propre que je le souhaiterais, si quelqu'un a une meilleure approche, j'aimerais d'en entendre parler.
Sur la base de ce que j'ai appris (je pourrais me tromper, laissez-moi savoir) vous ne pouvez nommer que des sections ( SECTIONNAMEKEYPATH) Par la propriété dans laquelle vous commandez votre table. Dans mon cas, je voulais trier ma table à l'aide d'une propriété appelée écran, mais je ne voulais pas que mes titres de sections soient 0, 1, 2, etc., je voulais plutôt que les titres de section utilisent la propriété Titre "Nom1", "Nom2", etc. qui correspond à l'écran. Pour ce faire, je détermine le titre de l'en-tête basé sur l'affichage dans le titre de Titledorhederinsection: P>
NSString *displayOrder = [sectionInfo name]; NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; [fetchRequest setEntity:[NSEntityDescription entityForName:@"Platform" inManagedObjectContext:managedObjectContext]]; NSNumberFormatter * numberFormatter = [[NSNumberFormatter alloc] init]; [numberFormatter setNumberStyle:NSNumberFormatterNoStyle]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"displayOrder == %@", [numberFormatter numberFromString:displayOrder]]; [fetchRequest setPredicate:predicate]; Platform *platform; NSError *error = nil; NSArray *fetchResults = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; if ([fetchResults count] > 0) { platform = [fetchResults objectAtIndex:0]; headerView.titleLabel.text = [platform name]; } else { headerView.titleLabel.text = @"Unknown"; } [numberFormatter release]; [fetchRequest release];
Pas de soucis, je suis content que cela ait aidé!
@Angeng, comment dans le monde avez-vous trouvé cela? "Basé sur ce que j'ai appris (je pourrais me tromper, laissez-moi savoir) Vous ne pouvez nommer que des sections (sectionNameKeypath) de la propriété dans laquelle vous commandez votre table." Ça me tue! Merci!
J'ai eu le même problème et j'ai une autre solution - utilisez une propriété transitoire pour la sectionNameKeyPath I.e. catégorie.sectionName. Il semble que si vous utilisez une propriété de base de base comme sectionNameKatheyPathe, il essaiera de trier avec cela.
Ainsi, en utilisant votre exemple ci-dessus: P>
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{ id<NSFetchedResultsSectionInfo> sectionInfo=[self.resultsController.sections objectAtIndex:section]; return sectionInfo.name; }
Dans mon cas, j'ai dû RTFM: P>
Si cette section Qui créait des incohérences dans la liste de la table de commander lors de la section Source: - initwithfetchrequest: GestionedObjectContext: SECTIONNAMEEYPATH: CACHENAME: CODE> P>
SectionNameKatheyPath code> ou
NSSTORDEScriptor code> Propriété de l'objet géré a été modifiée dans un ordre de tri différent de celui de l'autre propriété. p>
https://richardwarrender.com/2010/10/core- Data-Objets-In-Mauvais sections / P>