J'essaie de faire des sections dans une vue de table basée sur l'alphabet et de trier mes entrées alphabétiquement sous ces sections.
J'ai rassemblé la première lettre de chaque entrée de BandsarrayIndex et j'essaie maintenant de Utilisez NSpredicate pour compter combien de chaque lettre il y a. P>
Je le fais en suivant ce guide . P>
Ils utilisent un Nsarray et j'utilise un NSDictionary et n'arrivent pas à le faire fonctionner. Quelqu'un peut-il m'aider? P>
L'application se bloque lorsque vous essayez de montrer la vue avec la vue de table. Dans la console de débogueur, l'erreur suivante est affichée: p>
* em> application de terminaison en raison d'une exception non capturée 'NsinvalidargumentException', raison: 'Je ne peux pas faire une opération de sous-chaîne avec quelque chose qui n'est pas une chaîne p> blockQuote>
Ceci est mon code p>
xxx pré> édition: ceci est mon bandeau. P>
L'en-tête P>
// set array from plist NSString *path = [[NSBundle mainBundle] pathForResource:@"Bands" ofType:@"plist"]; NSMutableArray* tmpArray = [[NSMutableArray alloc] initWithContentsOfFile:path]; self.bandsArray = tmpArray; // sort array after name ascending NSSortDescriptor *nameSorter = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)]; [bandsArray sortUsingDescriptors:[NSArray arrayWithObject:nameSorter]];
3 Réponses :
Voulez-vous dire que Si, d'autre part, bandsarray code> est une gamme de dictionnaires? Si tel est le cas, et en supposant que chaque dictionnaire a une touche code> nom code>, vous devez pouvoir modifier le prédicat à quelque chose comme
@ "auto.name commencewith [c]% @" code>. p>
bandsarray code> est en fait un dictionnaire lui-même, peut-être que vous voulez faire
[["Bandsarray Allkkeys] filteredAredAredAredicate ...] Code>. P >
@ "Self.name commence entre [c]% @" code> l'astuce! Merci beaucoup!
Désolé, je n'ai pas remarqué que vous avez eu un NSARRAY DE NSDITIONS. p>
lire ce fil: Utilisation de Nspredicate pour filtrer un Nsarray basé sur les clés Nsdictionnaires P>
Lorsque vous utilisez NSDictionary, vous devez vérifier par sa clé ... Je ne suis pas sûr que vous utilisiez la bonne approche! p>
Je ferais quelque chose comme: @Implementalation Word: Nsobect { Nstring * Titre; } p>
Ensuite, je créerais un nsarray de mots et filtreriez-y avec: @ "Titre commencewith [C]% @" P>
#import <Foundation/Foundation.h> // clang -framework Foundation Siegfried.m int main() { NSArray *arr = @[ @{@"1" : @"Fafner"}, @{@"1" : @"Fasolt"} ]; NSPredicate *p = [NSPredicate predicateWithFormat: @"SELF['1'] CONTAINS 'e'"]; NSArray *res = [arr filteredArrayUsingPredicate:p]; NSLog(@"Siegfried %@", res); return 0; }
Merci @isaak Cela m'a beaucoup aidé
Pouvez-vous montrer votre groupe? Est-ce juste un tableau Nstring? Je n'avais pas de tels problèmes avec Nspredicate. Ce devrait être juste un détail simple. Si votre bande de bande n'est pas de Nstrings, vous devriez filtrer par la propriété que vous recherchez.
Vous fuyez la mémoire comme un tamis lorsque vous créez
bandsarray code>.