Je suis en train de faire des sections en vue de la table en fonction de l'alphabet et de trier mes entrées par ordre alphabétique dans ces sections.NSPredicate sur NSDictionary
J'ai recueilli la première lettre dans chaque entrée de bandsArray dans bandsArrayIndex et j'essaye maintenant d'employer NSPredicate pour compter combien de chaque lettre il y a.
Je fais cela en suivant this guide.
Ils utilisent un NSArray et je suis en utilisant un NSDictionary et ne peut pas sembler le faire fonctionner. Quelqu'un peut m'aider?
l'application se bloque lorsque vous essayez de montrer la vue avec la vue de la table en elle. Dans Debugger Console l'erreur suivante apparaît:
* en raison de l'application Mettre fin exception uncaught « NSInvalidArgumentException », raison: « Ne peut pas faire une opération de sous-chaîne par quelque chose qui est pas une chaîne
C'est mon code
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSString *alphabet = [bandsArrayIndex objectAtIndex:section];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", alphabet];
NSArray *letters = [bandsArray filteredArrayUsingPredicate:predicate];
return [letters count];
}
EDIT: Ceci est mon groupe sArray.
L'en-tête
NSMutableArray *bandsArray;
@property (nonatomic, retain) NSMutableArray* bandsArray;
La mise en œuvre
// 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]];
Vous fuite de mémoire comme une passoire lorsque vous créez 'bandsArray '. –
Pouvez-vous montrer votre bandsArray? Est-ce juste un tableau NSString? Je n'avais pas de tels problèmes avec NSPredicate. Ce devrait être juste un détail simple. Si votre bandsArray n'est pas de NSStrings, vous devez filtrer par la propriété que vous recherchez. –