ประการแรกคุณต้องใช้ Objective-C ++ เพื่อให้ได้ผลน้อยที่สุด วิธีที่ง่ายที่สุดเพื่อให้แน่ใจว่าได้เปลี่ยนชื่อ*.mไฟล์ทั้งหมดของคุณเป็น*.mm
วิธีที่ใช้งานง่ายที่สุด (ไม่เลิกใช้งาน) ในการรับ C ++ std::stringเข้าสู่NSStringคือ:
std::string param; 
NSString* result = [NSString stringWithUTF8String:param.c_str()];
NSString* alternative = [[NSString alloc] initWithUTF8String:param.c_str()];
วิธีนี้จะใช้ได้ผลในกรณีส่วนใหญ่และหากคุณไม่ได้ทำการตรวจจับและแปลงการเข้ารหัสเฉพาะ UTF-8 จะให้ผลลัพธ์ที่ดีสำหรับการมีอักขระที่ไม่ใช่ภาษาละติน 'ใช้งานได้'
อย่างไรก็ตามหากคุณกำลังสร้างแอปที่ใหญ่ขึ้นหรือคุณไม่ใช่คนเดียวที่ใช้งานแอปนี้คุณอาจต้องการสิ่งที่ง่ายกว่าในการสมัคร
ดัดแปลงมาจากที่เก็บรายชื่อผู้รับจดหมาย Cocoa-dev
@interface NSString (cppstring_additions)
+(NSString*) stringWithwstring:(const std::wstring&)string;
+(NSString*) stringWithstring:(const std::string&)string;
-(std::wstring) getwstring;
-(std::string) getstring;
@end
@implementation NSString (cppstring_additions)
#if TARGET_RT_BIG_ENDIAN
const NSStringEncoding kEncoding_wchar_t = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingUTF32BE);
#else
const NSStringEncoding kEncoding_wchar_t = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingUTF32LE);
#endif
+(NSString*) stringWithwstring:(const std::wstring&)ws
{
    char* data = (char*)ws.data();
    unsigned size = ws.size() * sizeof(wchar_t);
    NSString* result = [[NSString alloc] initWithBytes:data length:size encoding:kEncoding_wchar_t];
    return result;
}
+(NSString*) stringWithstring:(const std::string&)s
{
    NSString* result = [[NSString alloc] initWithUTF8String:s.c_str()];
    return result;
}
-(std::wstring) getwstring
{
    NSData* asData = [self dataUsingEncoding:kEncoding_wchar_t];
    return std::wstring((wchar_t*)[asData bytes], [asData length] / sizeof(wchar_t));
}
-(std::string) getstring
{
    return [self UTF8String];
}
@end
ด้วยสิ่งนั้นในสถานที่ (และแก้ไขอย่างเหมาะสม#import) ตอนนี้คุณสามารถ:
NSString* result = [NSString stringWithstring:param];
string convertedBack = [result getstring];
และเช่นเดียวกันstd::wstringซึ่งมีประโยชน์มากกว่า