Fabio
Fabio

Reputation: 1973

NSPredicate finding multiple words in Objective C

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

Answers (2)

Imad Ali
Imad Ali

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

Ted
Ted

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

Related Questions