2013-06-25 3 views
0

Пытаюсь нагрузка следующего файла JSON ...Фильтрация NSArray из сложного JSON ресурса с использованием 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 
} 

если ваш случай вы можете simplely установить высоту ячейки невидимой до 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