使用NSPredcate从复杂的JSON资源中筛选NSArray



我正在尝试加载以下JSON文件。。。

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

转换为具有节的UITableView("divName"作为标题ForHeaderInSection,"itemName"在cell.textLabel.text中),这不是问题。我遇到的问题是根据itemVisible属性的值过滤单元格中的数据——"0"表示隐藏,"1"表示显示。我的最佳猜测是应该使用NSPredcate来完成,例如。。。

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

但我不知道如何将其与一个相当复杂的JSON对象结合起来。

如有任何帮助或建议,我们将不胜感激。

为什么不将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;
}

最新更新