【发布时间】:2011-06-21 13:37:35
【问题描述】:
我正在尝试根据字母表在表格视图中创建部分,并在这些部分下按字母顺序对我的条目进行排序。
我已经收集了bandsArrayIndex 中每个bandArray 条目中的第一个字母,现在我正在尝试使用NSPredicate 来计算每个字母有多少。
我正在关注this guide。
他们使用的是 NSArray,而我使用的是 NSDictionary,但似乎无法让它工作。谁能帮帮我?
应用程序在尝试显示包含表格视图的视图时崩溃。 在调试器控制台中显示以下错误:
* 由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因: '不能进行子串操作 不是字符串的东西
这是我的代码
- (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];
}
编辑:这是我的bandArray。
标题
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]];
【问题讨论】:
-
你能展示你的bandArray吗?它只是一个 NSString 数组吗?我对 NSPredicate 没有这样的问题。它应该只是一个简单的细节。如果您的 bandArray 不是 NSStrings,则应按您要查找的属性进行过滤。
-
当你创建
bandsArray时,你正在像筛子一样泄漏内存。
标签: iphone objective-c nsdictionary nspredicate