我正在尝试根据字母在表 View 中创建节,并在这些节下按字母顺序对我的条目进行排序。
我已经在bandsArrayIndex中的bandsArray的每个条目中收集了第一个字母,现在我正尝试使用NSPredicate来计算每个字母中有多少个。
我通过遵循this guide来做到这一点。
他们正在使用NSArray,而我正在使用NSDictionary,似乎无法使其正常工作。谁能帮我吗?
尝试显示其中带有表 View 的 View 时,应用程序崩溃。
在调试器控制台中,显示以下错误:
这是我的代码
- (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];
}
编辑:这是我的bandsArray。
header
NSMutableArray *bandsArray;
@property (nonatomic, retain) NSMutableArray* bandsArray;
实现
// 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]];
最佳答案
您的意思是bandsArray
是一个字典数组吗?如果是这样,并假设每个字典都有一个name
键,则您应该能够将谓词更改为@"SELF.name beginswith[c] %@"
。
另一方面,如果bandsArray
实际上是字典本身,则也许您想做[[bandsArray allKeys] filteredArrayUsingPredicate...]
。