Ошибка добавления NSString stringWithUTF8String

Я пытаюсь добавить массив символов к NSString. Когда я использую код ниже, я получаю эту ошибку:

********* метод инициализации-initWithCharactersNoCopy:length:freeWhenDone: не может быть отправлен в абстрактный объект класса NSCFString: Создайте конкретный экземпляр!

Что это означает и как это может быть зафиксировано?

NSString *str =  [[NSString new] initWithString:@"Name: "];
NSString *name = [[NSString new] stringWithUTF8String:user.name];
//NSString *name = [[NSString stringWithUTF8String:seg.segname] copy]; //this also failed
str = [str stringByAppendingString:name];
1
задан Justin Boo 17 May 2012 в 19:27
поделиться

3 ответа

Я думаю, вы ищете что-то вроде этого:

NSString *str = @"Name: ";
NSString *name = [NSString stringWithUTF8String:user.name];
str = [str stringByAppendingString:name];
2
ответ дан 2 September 2019 в 23:09
поделиться

Ошибка, которую вы видите, связана с отправкой -initWithString: на уже инициированную строку. Это происходит потому, что [NSString new] возвращает строку, которая уже инициализирована. Вы не можете использовать +new, если вам нужен специальный метод инициализации.

  1. Для сообщения -initWithString: вам нужно выделить NSString. Именно эта строка вызывает ошибку исключения, и ничего после нее не выполняется. Однако, как указал Карл, вам не нужно создавать еще один объект для имени, @"Name: " уже является NSString.

  2. Метод +stringWithUTF8String: является методом класса, поэтому отправьте его в класс NSString напрямую.

Возможно, вы захотите просмотреть документацию Apple по objective-c по Выделению и инициализации объектов.

0
ответ дан 2 September 2019 в 23:09
поделиться

Вместо добавления строки к другой, я бы использовал [NSString stringWithFormat:]

NSString *name = [NSString stringWithUTF8String:user.name];
str = [NSString stringWithFormat: @"Name: %@", name];

Вы даже можете написать код в одну строку.

str = [NSString stringWithFormat: @"Name: %@", [NSString stringWithUTF8String:user.name]];
0
ответ дан 2 September 2019 в 23:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: