我的 NSArray
填充了以下格式的 json
对象:
@"name" : @"a.smith"
@"age" : @"23"
@"badge" : @"red"
@"name" : @"f.wren"
@"age" : @"31"
@"badge" : @"blue"
@"name" : @"j.liby"
@"age" : @"19"
@"badge" : @"red"
我正在尝试创建一个新的NSMutableArray
,仅包含badge = @"red"
seg
是我现有的NSArray
,其中包含所有对象。这些用于填充自定义tableViewCell
:
NSArray *seg = [selections objectAtIndex:indexPath.row];
NSMutableArray *newBadgeArray = [[NSMutableArray alloc]init];
if ([[[seg objectAtIndex:indexPath.row] valueForKey:@"badge"] isEqualToString:@"red"]) {
[newBadgeArray insertObject:seg atIndex:indexPath.row];
}
我遇到以下错误,不确定为什么
由于未被发现的例外'NSrangeException'终止应用程序,原因:'*** - [__ __ nsarraym objectAtIndex:]:index 4超越界限[0 .. 3]'
如果要过滤您的数组以在tableview中显示,则必须在tableview的dataSource和委派方法之外过滤它。
@interface YourVC()
@property (strong, nonatomic) NSMutableArray *newBadgeArray;
@end
@implementation YourVC
- (void)viewDidLoad
{
[super viewDidLoad];
//...
NSArray *seg = //initialize your array
this.newBadgeArray = [[NSMutableArray alloc]init];
if ([[[seg objectAtIndex:indexPath.row] valueForKey:@"badge"] isEqualToString:@"red"]) {
[newBadgeArray insertObject:seg atIndex:indexPath.row];
}
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
retirn newBadgeArray.count;
}
您可以在ViewDidload中获取过滤的数组。为简单起见,使用快速枚举。
NSMutableArray *newBadgeArray = [[NSMutableArray alloc]init];
for (NSArray *seg in selections) {
NSLog(@"seg array: %@", seg);
[seg enumerateObjectsUsingBlock:^(id obj, NSUInteger index, BOOL *stop){
if ([[[seg objectAtIndex:index] valueForKey:@"badge"] isEqualToString:@"red"]) {
[newBadgeArray addObject:seg];
}
}];
}