sim*_*nbs 9 iphone objective-c nsdictionary nspredicate
我正在尝试根据字母表在表格视图中创建部分,并在这些部分下按字母顺序对我的条目进行排序.
我收集了bandArray中bandArrayIndex的每个条目中的第一个字母,我现在正在尝试使用NSPredicate来计算每个字母的数量.
我按照本指南这样做了.
他们正在使用NSArray而我正在使用NSDictionary,似乎无法让它工作.谁能帮我吗?
尝试使用表视图显示视图时,应用程序崩溃.在Debugger Console中,显示以下错误:
*由于未捕获的异常'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];
}
Run Code Online (Sandbox Code Playgroud)
编辑:这是我的bandArray.
标题
NSMutableArray *bandsArray;
@property (nonatomic, retain) NSMutableArray* bandsArray;
Run Code Online (Sandbox Code Playgroud)
实施
// 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]];
Run Code Online (Sandbox Code Playgroud)
Dan*_*son 22
你的意思是那bandsArray是一系列词典吗?如果是这样,并假设每个字典都有一个name键,你应该能够将谓词更改为类似的@"SELF.name beginswith[c] %@".
另一方面,如果bandsArray实际上是字典本身,也许你想做[[bandsArray allKeys] filteredArrayUsingPredicate...].
#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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13224 次 |
| 最近记录: |