2013-06-25 146 views
0

我試圖負載以下JSON文件複雜JSON資源...過濾NSArray的使用NSPredicate

{ 
    "divisions" : [ 
     { 
      "divName" : "Division Name", 
      "divList" : [ 
       { 
        "itemName" : "First item", 
        "itemVisible" : "1" 
       }, 
       { 
        "itemName" : "Second item", 
        "itemVisible" : "0" 
       }, 
       { 
        "itemName" : "Third item", 
        "itemVisible" : "0" 
       } 
      ] 
     } 
    ] 
} 

...與部分一個UITableView( 「divName」 爲titleForHeaderInSection, 「ITEMNAME」在cell.textLabel.text中),這不是問題。我遇到的問題是根據itemVisible屬性的值過濾單元格中的數據 - 「0」表示隱藏,「1」表示。我最好的猜測是,應該使用NSPredicate來完成,例如...

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"itemVisible == %@", @"1"]; 
NSArray *filteredArray = [randomArrayNameOfItems filteredArrayUsingPredicate:predicate]; 

...但我不知道如何實際上一個相當複雜的JSON對象納入本。

任何幫助或建議將不勝感激。

+0

意味着,如果itemVisible = 0,則U需要直接從表跳過此項... ? –

+0

爲什麼不使用JSon Parser? – DharaParekh

+0

@KumarKl正是。 – user1433391

回答

2

你爲什麼不把json字符串解碼成對象?

NSError *e; 
NSDictionary object = [NSJSONSerialization JSONObjectWithData:op.responseData options:NSJSONReadingMutableContainers error:&e]; 

if (e) 
{ 
    TLog(@"%@ %@",[e localizedDescription],op.responseString); 
} 

if ([object isKindOfClass:[NSDictionary class]]) 
{ 
    NSArray *itemArray = object[@"divisions"][@"divList"] 
    //filter here 
} 

,如果你的情況下,你可以將電池無形的高度簡單地設置爲0

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //if the cell. itemVisible == 0 , return 0.0f; 
} 
+0

事實上,我使用NSJSONSerialization,但以一種稍微不同的方式 - 我創建了一個全局NSArray self.contentArray(類似於[object objectForKey:@「divisions」]),以便numberOfSectionsInTableView是[self.contentArray count],numberOfRowsInSections是[[[self.contentArray objectAtIndex:section] objectForKey:@「divList」] count] - 我想要做的,我猜想,是以某種方式過濾深度數組「divList」的元素,我不知道這應該在哪裏做完了。 – user1433391

+1

我認爲你不必過濾結果,你可以設置你不想要的單元格的高度0 – adali

+0

工程就像一個魅力,非常感謝你。 – user1433391