Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 以NSDictionary作为对象的嵌套数组上的NSPredicate_Ios_Objective C_Nsarray_Nsdictionary_Nspredicate - Fatal编程技术网

Ios 以NSDictionary作为对象的嵌套数组上的NSPredicate

Ios 以NSDictionary作为对象的嵌套数组上的NSPredicate,ios,objective-c,nsarray,nsdictionary,nspredicate,Ios,Objective C,Nsarray,Nsdictionary,Nspredicate,我有一本字典,比如: { "2017-05-02" = ( { "always_valid" = 0; date = "2017-05-02"; from = "12:00"; to = "13:00"; }, { "always_valid" = 0; date = "2017-05-02"; from = "12:00

我有一本字典,比如:

{
"2017-05-02" =     (
            {
        "always_valid" = 0;
        date = "2017-05-02";
        from = "12:00";
        to = "13:00";
    },
            {
        "always_valid" = 0;
        date = "2017-05-02";
        from = "12:00";
        to = "12:00";
    },
            {
        "always_valid" = 0;
        date = "2017-05-02";
        from = "14:00";
        "hourly_rate" = 12;
        to = "15:00";
    }
);
"2017-05-03" =     (
            {
        "always_valid" = 0;
        date = "2017-05-03";
        from = "12:00";
        to = "13:00";
    }
);
"2017-05-18" =     (
            {
        "always_valid" = 1;
        date = "2017-05-18";
        from = "12:00";
        to = "12:00";
    }
);
}
我正在申请

NSPredicate *filter = [NSPredicate predicateWithFormat:@"always_valid = \"1\""];
 NSArray *alwaysvalid = [[dic allValues] filteredArrayUsingPredicate:filter];
当我有这样的结构时,它就起作用了

数组>字典

但现在就像

数组>数组>字典

通过对数组执行[dic allValues]。 任何帮助我应该应用什么来保持快速。

尝试以下方法:

 NSArray *array = [NSArray arrayWithObject:dict];   // you can also do same for Name key... 
 NSArray *alwaysvalid = [array filteredArrayUsingPredicate:filter];

您需要做的是枚举字典并创建新的筛选字典

NSMutableDictionary *filterDic = [[NSMutableDictionary alloc] init];
NSPredicate *filter = [NSPredicate predicateWithFormat:@"always_valid = 1"];
[dict enumerateKeysAndObjectsUsingBlock:^(NSString* key, NSArray* obj, BOOL *stop) {
     NSArray *filterArray = [obj filteredArrayUsingPredicate:filter];
     if (filterArray.count > 0) {
         filterDic[key] = filterArray;
     }
}];

我应该返回“2017-05-18”=({“始终有效”=1;date=“2017-05-18”;from=“12:00”;to=“12:00”;});由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“ALL或ANY运算符的左侧必须是NSArray或NSSet。”;NSArray*alwaysvalid=[[dic allValues]filteredArrayUsingPredicate:filter];“始终有效”将始终为1或0。@SameerAzem您是否尝试过使用
EnumerateKeysandObjectsSusingBlock
?@SameerAzem我不明白,因为如果您的字典包含所有值作为数组,这应该可以很好地工作