过滤关键ios的NSArray对象

时间:2015-05-19 08:22:05

标签: ios objective-c cocoa-touch nsarray

我有NSArrayjson个对象,格式如下:

@"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:]:索引4超出边界[0 .. 3]'

2 个答案:

答案 0 :(得分:0)

如果要过滤数组以在tableview中显示,那么必须在tableview的数据源和委托方法之外对其进行过滤。

@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;
}

答案 1 :(得分:0)

您可以在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];
        }
    }];
}