2011-12-11 6 views
1

文字列の配列をフィルタリングしようとすると、値が一致することはありませんか? filteredArrayUsingPredicate:を使用している場合はその中にあります。文章のURLを?に置き換えることはできますか?あなたはまだ同じことを得る。フィルタリングされたNSArrayは正しく動作しません。 NSString内にある

はここで単純化されたコードです:

-(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

?は特殊文字であるかもしれないが。ただそれをエスケープする:

@"http://www.google.com\\?test=1" 
+0

ありがとう、私は単一のエスケープを試みたが、2つが必要であることを認識していない。 – Chad

+0

@Chad:文字列リテラルによって食べられるので2つが必要です。 – Dani

関連する問題