Salut, j'essaye de convertir un standard std::string
en un NSString
mais je n'ai pas beaucoup de chance.
Je peux convertir avec succès de un NSString
à un std::string
avec le code suivant
NSString *realm = @"Hollywood";
std::string REALM = [realm cStringUsingEncoding:[NSString defaultCStringEncoding]];
Cependant, j'obtiens une erreur de compilation lorsque j'essaye ce qui suit
NSString *errorMessage = [NSString stringWithCString:REALM encoding:[NSString defaultCStringEncoding]];
L'erreur que j'obtiens est
Cannot convert 'std::string' to 'const char*' in argument passing
Est-ce que j'ai râté quelque chose?
Merci d'avance.
objective-c
nsstring
objective-c++
stdstring
Anthony McCormick
la source
la source
Réponses:
Récupère la chaîne C de std :: string pour la conversion:
la source
Tout d'abord, vous devez utiliser Objective-C ++ pour que cela fonctionne le moins du monde; moyen le plus simple de vous assurer que vous renommez tous vos
*.m
fichiers en*.mm
De loin, le moyen manuel le plus utilisable (non obsolète) pour obtenir un C ++
std::string
dans unNSString
est avec:Cela fonctionnera dans la plupart des cas - et si vous ne faites pas de détection et de conversion d'encodage spécifiques, UTF-8 va vous donner un bon résultat pour avoir des caractères non latins "juste fonctionner".
Si vous créez une application plus volumineuse ou si vous n'êtes pas le seul à y travailler, vous voudrez probablement quelque chose de plus facile à appliquer.
Adapté des archives de la liste de diffusion Cocoa-dev
Avec cela en place (et correctement
#import
édité), vous pouvez maintenant:Et la même chose pour
std::wstring
, ce qui est plus que pratique.la source
==
mais plutôt être la représentation «la plus proche» ou «meilleure» qu'ils peuvent faire. Le récepteur dans ce cas est l'NSString
implémentation de la classe, et la valeur renvoyée n'est pas un objet Objective-C, donc ils pourraient également couvrir cela avec un langage standard.la source
Apple a maintenant une nouvelle façon dont ils veulent que vous effectuiez cette conversion. Dans XCode7, j'ai utilisé l'option Edition> Convertir> Vers la syntaxe moderne de l'objectif C ... pour le savoir. Il utilise un symbole @ abrégé.
la source
J'ai également constaté que:
Fonctionne comme un champion.
la source
Voici l'extrait de code / l'exemple:
la source