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];
必要な先行ゼロの数を設定できる必要があります。 – Larme
しかし、私は多くの先導的なゼロがどれくらいあるか分かりません。 –
まあ、ゼロを導く数字は、[[文字列長さ] 'と' [[数値文字列長]] 'の違いではありませんか? – Larme