2014-10-02 24 views
0

我有字典的阵列如下面在过滤字典数组时,无法分析格式字符串?

<__NSArrayI 0x10053e7c0>(
    { 
    busType = "A/C SLEEPER"; 
    fare = 700; 
    }, 
    { 
    busType = "Volvo A/C B9R Multi-Axle Semi Sleeper"; 
    fare = 500; 
    }, 
    { 
    busType = "2+1 Hi-Tech Non A/c"; 
    fare = 500; 
    }, 
    { 
    busType = "Hitech Sleeper Cum Seater"; 
    fare = 1500; 
    }, 
    { 
    busType = "Hi-Tech Non A/c"; 
    fare = 900; 
    }, 
    { 
    busType = "Mercedes Benz Multi Axle"; 
    fare = 1700; 
    }) 

现在我想筛选此阵列考虑busType键即A/C或非A/C值加也SLEEPER。所以我两个NSString设置这些值形成一个谓词,如下所示。

-(void)applyFilter:(UIButton *)sender{ 
    if (ac_Value.length>1&&sleeper_Value.length>1) { 

     NSString *dictionaryKey = @"busType"; 
     NSString *predicateString1 = ac_Value; // Set this NSString as A/C or Non A/c 
     NSString *predicateString2 = sleeper_Value; //Set this NSString as Sleeper or Non/Sleeper 
     NSPredicate* predicate = [NSPredicate predicateWithFormat:@"%K CONTAINS[cd] %@ %@",dictionaryKey,predicateString1,predicateString2]; 
     NSArray *filteredArray = [busArray filteredArrayUsingPredicate:predicate]; 
     NSLog(@"filtered array : %@", filteredArray); 

    } 


} 

但是我坚持通过谓词形成部分,它给出了一个像下面的错误。任何帮助表示赞赏。

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "%K CONTAINS[cd] %@ %@"' 

回答

1

如果我理解正确的话,你可能会想你的谓词是这样的:

[NSPredicate predicateWithFormat:@"%K CONTAINS[cd] %@ AND %K CONTAINS[cd] %@",dictionaryKey,predicateString1,dictionaryKey,predicateString2]; 

或者,如果关键是始终busType可以缩短,为:

[NSPredicate predicateWithFormat:@"busType CONTAINS[cd] %@ AND busType CONTAINS[cd] %@",predicateString1,predicateString2]; 

然而将ac_Value设置为“A/C”将匹配包含“A/C”和“非A/C”的值。将[cd]更改为[d]以创建区分大小写/区分变音的不敏感滤镜。

+0

好的... thanx帮助 – iSD 2014-10-02 19:07:25