2015-05-19 76 views
0

我有一個NSArray充滿json對象的格式如下:過濾NSArray的對象爲重點的ios

@"name" : @"a.smith" 
@"age" : @"23" 
@"badge" : @"red" 

@"name" : @"f.wren" 
@"age" : @"31" 
@"badge" : @"blue" 

@"name" : @"j.liby" 
@"age" : @"19" 
@"badge" : @"red" 

我想創建只裝着誰的badge = @"red"

seg是對象的新NSMutableArray我現有的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]」

+0

也許你'indexPath.row == 4'而'seg'只有3項。確保你不會爲表格代理返回更大的數字 – Azat

+0

是的。情況可能如此。我想你在表視圖中使用數組作爲數據源。請檢查表格視圖中的行數。它應該等於你的數組長度。 –

+0

什麼是您的表視圖中的行數?它是否被硬編碼? –

回答

0

如果你要過濾你的陣列中的實現代碼如下顯示,則必須將其過濾的實現代碼如下的數據源和委託方法之外。

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