Sto cercando di creare sezioni in una vista tabella in base all'alfabeto e di ordinare le mie voci in ordine alfabetico in queste sezioni.NSPredicate su NSDictionary
Ho raccolto la prima lettera in ogni voce di bandsArray in bandsArrayIndex e ora sto cercando di utilizzare NSPredicate per contare quante lettere ci sono.
Sto facendo questo seguendo this guide.
Stanno usando un NSArray e sto usando un NSDictionary e non riesco a farlo funzionare. Qualcuno mi può aiutare?
L'applicazione si arresta in modo anomalo quando si tenta di mostrare la vista con la vista tabella. Nel debugger console viene visualizzato il seguente errore:
* terminazione app a causa di eccezione non identificata 'NSInvalidArgumentException', la ragione: 'Non può fare un'operazione di stringa con qualcosa che non è una stringa
Questo è il mio codice
- (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: Questa è la mia band sArray.
L'intestazione
NSMutableArray *bandsArray;
@property (nonatomic, retain) NSMutableArray* bandsArray;
L'implementazione
// 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]];
Stai perdite di memoria come un setaccio quando si crea 'bandsArray '. –
Puoi mostrare il tuo bandsArray? È solo un array NSString? Non ho avuto problemi con NSPredicate. Dovrebbe essere solo un semplice dettaglio. Se il tuo bandsArray non è di NSStrings, dovresti filtrare in base alla proprietà che stai cercando. –