问题
I have an NSPredication with format like this:@"Status CONTAINS[cd] shipped"
I have an array of dictionary, here's an example:
{
{
Category = "Category 4";
Comp = "Category 4";
Depth = 02;
Grade = New;
Length = 02;
Location = "Thousand Oaks, CA";
Name = "3ply Mat";
Owner = "Owner 3";
PUP = 2;
Status = Shipped;
"Unit Number" = 20110507113852351;
Width = 02;
},
{
Category = "Category 4";
Comp = "Category 4";
Depth = 02;
Grade = New;
Length = 02;
Location = "Thousand Oaks, CA";
Name = "3ply Mat";
Owner = "Owner 3";
PUP = 2;
Status = Shipped;
"Unit Number" = 20110516094641587;
Width = 02;
}
)
But it's returning an empty array. What am I doing wrong? Thanks
回答1:
You want:
[NSPredicate predicateWithFormat:@"Status =[cd] 'shipped'"];
Or:
[NSPredicate predicateWithFormat:@"Status =[cd] %@", @"shipped"];
Your problem was that your predicate format had shipped
, when it should've had 'shipped'
. The lack of singles quotes meant it was trying to compare [dictionary valueForKey:@"Status"]
to [dictionary valueForKey:@"shipped"]
, instead of to the string literal @"shipped"
.
回答2:
You can use the keywords MATCHES
, CONTAINS
etc., against strings. As Status is not a string, I guess, you need to check it like this,
[NSPredicate predicateWithFormat:@"Status = %d", Shipped];
来源:https://stackoverflow.com/questions/6185008/nspredicate-not-working-with-array-of-dictionaries