検索

2016-03-31 5 views
0

I電話番号オブジェクトの配列を有する、電話番号モデルである:検索

@property NSString *hotlineName; 
@property NSString *hotlineNameAr; 
@property NSString *hotlineNumber; 
@property NSString *hotlineImage; 
@property NSInteger hotlineID; 
@property RLMArray<Tags> *hotlineTags; 

私が検索を実行するとhotlineName、hotlineNameArいずれかであれば、私は配列をフィルタ、hotlineNumber、およびプロパティhotlineTags:tagNameおよびtagNameArに検索テキストが含まれています。

-(void) searchForText: (NSString *) searchText{ 

    NSString *predicateFormat = @"SELF.%K contains[cd] %@"; 
    NSString *tagFormat = @"ANY SELF.hotlineTags.%K contains[cd] %@"; 

    NSString *searchNameAttribute = @"hotlineName" ; 
    NSString *searchTagAttribute = @"tagName"; 
    NSString *searchNameAttribute_ar = @"hotlineNameAr" ; 
    NSString *searchTagAttribute_ar = @"tagNameAr"; 
    NSString *numberAttribute = @"hotlineNumber"; 

    NSPredicate *namePredicate = [NSPredicate predicateWithFormat:predicateFormat, searchNameAttribute, searchText]; 

    NSPredicate *tagPredicate = [NSPredicate predicateWithFormat:tagFormat, searchTagAttribute, searchText]; 

    NSPredicate *namePredicate_ar = [NSPredicate predicateWithFormat:predicateFormat, searchNameAttribute_ar, searchText]; 

    NSPredicate *tagPredicate_ar = [NSPredicate predicateWithFormat:tagFormat, searchTagAttribute_ar, searchText]; 

    NSPredicate *numberPredicate = [NSPredicate predicateWithFormat:predicateFormat, numberAttribute, searchText]; 

    NSPredicate *predicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[namePredicate, numberPredicate, tagPredicate, namePredicate_ar, tagPredicate_ar]]; 

    filteredResults = [hotlines_arr filteredArrayUsingPredicate:predicate]; 
} 

とこれまでのところそれがうまく機能し、私は別のロケールで番号を検索するとき、問題は私が使用し、アラビア語でこの例では、発生した:

私は、次のような配列をフィルタリングするNSPredicateを使用しましたNSNumberFormatterなど:

// Convert string From Arabic/Persian numbers to English numbers 
+(NSString *) convertToEnglishNumber:(NSString *) string { 

    // NSNumericSearch 
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
    formatter.numberStyle = NSNumberFormatterDecimalStyle; 
    NSLocale *locale = [NSLocale localeWithLocaleIdentifier:@"EN"]; 
    [formatter setLocale:locale]; 
    NSNumber *number = [formatter numberFromString:string]; 

    return [number stringValue]; 

} 

しかしNSNumberFormatterの問題点は、任意の先行ゼロのは、変換では無視するので、考慮のロケールを取り込みながら、私は、ロケールに基づいてNSStringのをフォーマットしたり、配列を検索するために、同じ選択肢を必要としているということですspotlのオプションight search。 私はまたそのような書式を試みましたが、無駄でした。

NSString *str = [[NSString alloc] initWithFormat:@"%@" locale:locale, searchText]; 

NSString *localizedString =[NSString localizedStringWithFormat:@"%@", searchText]; 
+0

必要な先行ゼロの数を設定できる必要があります。 – Larme

+0

しかし、私は多くの先導的なゼロがどれくらいあるか分かりません。 –

+1

まあ、ゼロを導く数字は、[[文字列長さ] 'と' [[数値文字列長]] 'の違いではありませんか? – Larme

答えて

0

は、私は他のオプションを考えることができませんでしたし、これが最後だったので、私は、文字列を交換することになったが、私は答えを非常に不幸だ:NSNumberFormatter`あなた `で

+ (NSString *) replaceStrings: (NSString *) textToEdit{ 
    NSLocale *locale = [NSLocale localeWithLocaleIdentifier:@"ar"]; 
    for (NSInteger i= 0; i < 10; i++) { 
     NSString *stringVal = [@(i) stringValue]; 
     NSString *localeString = [@(i) descriptionWithLocale:locale]; 
     textToEdit = [textToEdit stringByReplacingOccurrencesOfString:localeString withString:stringVal]; 
    } 
    return textToEdit; 
}