Строки в Objective-C ++ - PullRequest
       18

Строки в Objective-C ++

3 голосов
/ 08 марта 2010

Я только что переключил свой код с Objective-C на Objective-C ++. Все идет гладко, кроме двух строк.

NSString * text1=[[NSString stringWithFormat:@"%.2f",ymax] UTF8String];

Эта строка жалуется, что

error: cannot convert 'const char*' to 'NSString*' in initialization

Вторая ошибка, связанная с первой, связана со строкой:

CGContextShowTextAtPoint(context, 2, 8, text1, strlen(text1));

жалуется, что

error: cannot convert 'NSString*' to 'const char*' for argument '1' to 'size_t strlen(const char*)'

Есть ли что-то, что я упустил в различиях между ObjC и ObjC ++?

Ответы [ 3 ]

7 голосов
/ 08 марта 2010

Вы хотите:

const char * text1 = [[NSString stringWithFormat:@"%.2f", ymax] UTF8String];

Не:

NSString *text1 = [[NSString stringWithFormat:@"%.2f", ymax] UTF8String];

(обратите внимание на возвращаемое значение -UTF8String .)

2 голосов
/ 08 марта 2010

Но знаете ли вы, что вы также можете просто сказать NSString нарисовать себя, вот так?

NSString *text = [NSString stringWithFormat:@"%.2f", ymax];

//  Send a message to the string to draw itself at the given point with
//  the provided font.
//
[text drawAtPoint:CGPointMake(20.0, 30.0)
         withFont:[UIFont systemFontOfSize:36.0]];
1 голос
/ 08 марта 2010

Вы не можете назначить char * (который возвращает UTF8String) для NSString *. Это верно для общего случая; тем не менее, компилятор C ++ явно строже. Кажется, твой код скомпилирован просто удачей; Вы хотите переместить оператор UTF8String на один бит вниз; CGContextShowTextAtPoint(context, 2, 8, text1, strlen([text1 UTF8String]));

...