您好
我使用以下命令将std::string
转换为NSString,但在尝试显示nsstring的值时返回(null)
我需要它在转换时返回而不是(null)为空任何建议
StudyDate=[NSString stringWithCString:studyDate length:strlen(studyDate)];
任何避免空值的建议
最好的问候
答案 0 :(得分:8)
编辑语法@"string"
仅用于 来构建NSString。使用std::string
时,您应该使用标准的"string"
语法。
NSString* aConstantNSString = @"foo";
const char* aConstantCString = "foo";
std::string aConstantStdString = "foo";
CFStringRef aConstantCFString = CFSTR("foo");
+stringWithCString:length:
has been deprecated。如果字符串仅包含ASCII字符,通常可以use +stringWithUTF8String:
instead。
只有当studyDate
是C字符串(即const char*
)时,您的方法才有效,但您说您有std::string
。没有方法可以将std::string
直接转换为NSString。您必须先使用.c_str()
创建C字符串:
StudyDate = [NSString stringWithUTF8String:studyDate.c_str()];
(但上述情况不应该是您获得(null)
的原因,因为将std::string
传递给+stringWithCString:length:
甚至strlen
会产生编译时错误立即
'error: cannot convert ‘std::string’ to ‘const char*’ in argument passing'
因此studyDate
应该已经是const char*
。我们需要更多的上下文(代码)才能看到发生了什么。)
答案 1 :(得分:1)
NSString objCString = @"this is my objective c string";
std::string cppString; // this is your c++ string or however you declared it blah blah blah
cppString = [objCString UTF8String];
// this is the conversion of an NSString into a c++ string
// not sure if it will work for c strings but you can certainly try
那就是恐惧所有。所有你需要的只是一行代码。这是在ios sdk 4.3 btw中完成的,所以我不确定如果你在其他地方把它编辑就会改变编码。