Отфильтрованный NSArray не работает правильно, когда? находится в строке NSString - PullRequest
1 голос
/ 11 декабря 2011

Когда я пытаюсь отфильтровать массив строк, я не получаю совпадение со значением, которое имеет?в нем при использовании FilterArrayUsingPredicate :.Вы можете заменить URL-адреса просто предложением с?и вы все еще получаете то же самое.

Вот упрощенный код:

-(void)test {

    NSArray *theURLs = [NSArray arrayWithObjects:@"http://www.google.com", @"http://www.google.com?test=1", nil];

    NSString *currentURL = @"http://www.google.com?test=1";
    NSLog(@"currentURL %@", currentURL);
    NSPredicate *matchURLPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES[cd] %@", [currentURL lowercaseString]];
    NSLog(@"match predicate %@", matchURLPredicate);
    NSArray *filteredArray = [theURLs filteredArrayUsingPredicate:matchURLPredicate];
    NSLog(@"filtered array %@", filteredArray);
    if ([filteredArray count]== 0) {

        NSLog(@"http://www.google.com?test=1 should have been found, but  was not");

    } else {

        NSLog(@"http://www.google.com?test=1 was found");

    }

}

Если я ищу просто @ "http://www.google.com", он фильтруется очень хорошо.

Вот исправленный код:

-(void)test {

    NSArray *theURLs = [NSArray arrayWithObjects:@"http://www.google.com", @"http://www.google.com?test=1", nil];

    NSString *currentURL = @"http://www.google.com\\?test=1";
    NSLog(@"currentURL %@", currentURL);
    NSPredicate *matchURLPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES[cd] %@", [currentURL lowercaseString]];
    NSLog(@"match predicate %@", matchURLPredicate);
    NSArray *filteredArray = [theURLs filteredArrayUsingPredicate:matchURLPredicate];
    NSLog(@"filtered array %@", filteredArray);
    if ([filteredArray count]== 0) {

        NSLog(@"http://www.google.com?test=1 should have been found, but  was not");

    } else {

        NSLog(@"http://www.google.com?test=1 was found");

    }

}

1 Ответ

1 голос
/ 11 декабря 2011

? может быть специальным символом.просто избегайте этого:

@"http://www.google.com\\?test=1"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...