2016-03-31 8 views
0

I eine Reihe von Telefonnummer-Objekte haben, ist die Telefonnummer-Modell wie folgt:Suche durch NSArray von Objekten mit unterschiedlichen locale

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

wenn ich eine Suche durchführen, I das Array auswählen, wenn entweder hotlineName, hotlineNameAr , hotlineNumber und in der Eigenschaft hotlineTags: tagName und tagNameAr enthalten den Suchtext.

I verwendet NSPredicate das Array als solche zu filtern:

-(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]; 
} 

und so weit es funktioniert gut, das Problem entstand, als ich mit Zahlen in einem anderen Gebietsschema zu suchen, in diesem Fall in Arabisch, so hat mich NSNumberFormatter als solche:

// 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]; 

} 

aber das Problem mit NSNumberFormatter ist, dass jeder führenden Nullen bei der Umwandlung ignoriert werden, so brauche ich eine Alternative, um das NSString zu formatieren, basierend auf locale oder Array suchen, während in Betracht locale nehmen, die gleichen Option in Spotl igight suchen. Ich habe auch versucht, Formatierung als solche, aber es war vergeblich.

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

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

In 'NSNumberFormatter' Sie sollte in der Lage sein zu bestimmen, wie viele führende Null Sie brauchen. – Larme

+0

Aber ich habe keine Ahnung, wie viele führende Nullen ich haben werde. Es ist eine enthält Suche ... –

+1

Nun, die Nummer führende Null ist nicht der Unterschied zwischen der [[String Länge] 'und' [[Anzahl StringValue] Länge] '? – Larme

Antwort

0

Da ich keine andere Option denken konnte, und das war ein letzter Ausweg, landete ich die Zeichenfolge zu ersetzen, aber ich bin sehr unzufrieden mit Antwort:

+ (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; 
} 
Verwandte Themen