Reputation: 1973
I have this code to search in a String particular words like Canada Poland México Example:
NSString *valueOfUser = @"I want Poland"
NSPredicate *pred =[NSPredicate predicateWithFormat: @"SELF contains[c] %@", valueOfUser];
NSArray *arr = @[
@"Canada",
@"Poland",
@"México"
];
NSArray *filtered = [arr filteredArrayUsingPredicate: pred];
// But this array always contain 0 elements
Where is my error?
I want to find a solution like:
NSString *valueOfUser = @"I want Poland"
filtered[0] -> "Poland"
NSString *valueOfUser = @"I choose Poland and México"
filtered[0] -> "Poland"
filtered[1] -> "México"
Upvotes: 0
Views: 282
Reputation: 3301
Your query should be opposite:
valueOfUser CONTAINS[c] SELF
, try this:
Objective C:
NSString *valueOfUser = @"I want Poland";
NSPredicate *pred =[NSPredicate predicateWithFormat: @"%@ contains[c] SELF", valueOfUser];
NSArray *arr = @[
@"Canada",
@"Poland",
@"México"
];
NSArray *filtered = [arr filteredArrayUsingPredicate: pred];
Swift:
let dataSource = ["Canada","Poland","México"] as NSArray
let searchString = "I choose Poland and México"
let predicate = NSPredicate(format: "%@ contains[c] SELF", searchString)
let dataArray = dataSource.filter { predicate.evaluate(with: $0) }
Upvotes: 4
Reputation: 23746
Some people find this more readable
NSString *valueOfUser = @"I want Poland";
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(NSString *evaluatedObject, NSDictionary *bindings) {
return [valueOfUser containsString:evaluatedObject];
}];
NSArray *arr = @[
@"Canada",
@"Poland",
@"México"
];
NSArray *filtered = [arr filteredArrayUsingPredicate:predicate];
Upvotes: 1