Lorsque j'imprime la valeur d'une constante CFString, par ex. une étiquette AddressBook dans la console, la valeur de sortie est _$!<home>!$_
. Comment puis-je extraire uniquement la valeur pure, par exemple la maison? Toute aide serait grandement appréciée s'il vous plaît.Comment extraire une chaîne pure d'une chaîne constante
Répondre
Toutes les constantes de chaîne n'ont pas toutes ces gubbins autour d'elles - il arrive que quelqu'un décide que celles du carnet d'adresses le font. Par conséquent, je ne pense pas qu'il existe une fonction intégrée pour les supprimer.
Cela rend ce problème simple "Comment supprimer des caractères?" question. Il existe de nombreuses solutions à cela, mais simple est:
NSString *label = @"_$!<home>!$_";
NSString *rawLabel = [[label stringByReplacingOccurrencesOfString:@"_$!<" withString:@""]
stringByReplacingOccurrencesOfString:@">!$_" withString:@""];
Si vous affichez le nom de la propriété dans votre interface, utilisez the ABCopyLocalizedPropertyOrLabel
function ou the ABPersonCopyLocalizedPropertyName
function au lieu de tenter d'extraire un nom du privé l'implémentation valeur de détail de la constante.
Si vous faites quelque chose comme ceci:
NSLog(@"%@: %@", kABURLsProperty, URLsValue);
Essayez ceci:
//In a header
#define STRING_FROM_NAME(name) @#name
//In the implementation
NSLog(@"%@: %@", STRING_FROM_NAME(kABURLsProperty), URLsValue);
Cela affichera le nom de la constante, ce qui est beaucoup plus reconnaissable, au lieu du privé valeur implémentation-détail de la constante. Notez que, puisqu'il s'agit d'une macro préprocesseur, elle ne suit pas les variables, elle crée simplement une chaîne à partir du premier argument que vous passez, elle ne cherche pas à inverser la recherche d'une chaîne. Donc, si vous passez un nom de variable, vous obtiendrez le nom de votre variable dans la sortie)
Voici le code snipped J'utilise parce que ABCopyLocalizedPropertyOrLabel
est Mac OS X uniquement au moment.
NSString *labelTranslation = @"";
if ([label isEqualToString:@"_$!<Home>!$_"])
labelTranslation = @"Home";
else if ([label isEqualToString:@"_$!<Mobile>!$_"])
labelTranslation = @"Mobile";
else if ([label isEqualToString:@"_$!<Work>!$_"])
labelTranslation = @"Work";
else if ([label isEqualToString:@"_$!<WorkFAX>!$_"])
labelTranslation = @"Work (Fax)";
else if ([label isEqualToString:@"_$!<Main>!$_"])
labelTranslation = @"Main";
else if ([label isEqualToString:@"_$!<HomeFAX>!$_"])
labelTranslation = @"Home (Fax)";
else if ([label isEqualToString:@"_$!<Pager>!$_"])
labelTranslation = @"Pager";
else if ([label isEqualToString:@"_$!<Other>!$_"])
labelTranslation = @"Other";
Sur l'iPhone, essayez plutôt ABPersonCopyLocalizedPropertyName. –
Nice Peter, en supprimant 16 lignes de code, ouais! :) – catlan
Utilisation:
NSString *label = (NSString*)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(contact, index));
- 1. Comment extraire une chaîne d'une chaîne plus grande?
- 2. Comment extraire une sous-chaîne dans Ant
- 3. php pour extraire une chaîne de guillemet
- 4. Comment extraire l'URL d'une chaîne en PHP?
- 5. Extraire toute la chaîne d'un projet Java
- 6. Comment extraire une sous-chaîne d'un .NET RegEx?
- 7. RegEx pour exclure une constante de chaîne spécifique
- 8. Comment extraire une sous-chaîne à partir d'une chaîne dans Java
- 9. Extraire la sous-chaîne de la chaîne avec Regex
- 10. Comment convertir une chaîne en tableau de caractères dans c (ou) comment extraire une chaîne de caractères char unique?
- 11. Extraire tous les liens d'une chaîne
- 12. C# Extraire un nom d'une chaîne
- 13. La plus longue sous-chaîne commune avec mémoire constante?
- 14. Comment puis-je extraire la chaîne 'foo' d'une chaîne [email protected]?
- 15. Comment puis-je extraire un groupe de nombres d'une chaîne?
- 16. Comment insérer une chaîne dans une autre chaîne?
- 17. Trouver une chaîne dans une chaîne
- 18. Préfixer une chaîne à une autre chaîne
- 19. Comment utiliser une valeur de chaîne/colonne comme constante d'intervalle de date mysql (DAY, MONTH ...)?
- 20. Comment extraire une valeur numérique d'une chaîne dans une requête MySQL?
- 21. Comment puis-je extraire une sous-chaîne après une position de correspondance?
- 22. comment casser une chaîne dans la sous-chaîne dans Excel?
- 23. Comment convertir une chaîne strings en chaîne en C++?
- 24. Comment puis-je trouver une sous-chaîne dans une chaîne en utilisant Perl?
- 25. iPhone: Comment crypter une chaîne
- 26. comment découper une chaîne javascript
- 27. Comment pixelliser une chaîne (mac)
- 28. Obtention d'une chaîne aléatoire dans une chaîne
- 29. asp.net Convertir une chaîne CSV en chaîne []
- 30. Regex - extraire des informations d'une chaîne en Java
Merci. J'ai juste supposé que ce serait une caractéristique de toutes les constantes plutôt qu'une AB. – RunLoop