Я пытаюсь добавить массив символов к 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];
Я думаю, вы ищете что-то вроде этого:
NSString *str = @"Name: ";
NSString *name = [NSString stringWithUTF8String:user.name];
str = [str stringByAppendingString:name];
Ошибка, которую вы видите, связана с отправкой -initWithString: на уже инициированную строку. Это происходит потому, что [NSString new] возвращает строку, которая уже инициализирована. Вы не можете использовать +new, если вам нужен специальный метод инициализации.
Для сообщения -initWithString: вам нужно выделить NSString. Именно эта строка вызывает ошибку исключения, и ничего после нее не выполняется. Однако, как указал Карл, вам не нужно создавать еще один объект для имени, @"Name: " уже является NSString.
Метод +stringWithUTF8String: является методом класса, поэтому отправьте его в класс NSString напрямую.
Возможно, вы захотите просмотреть документацию Apple по objective-c по Выделению и инициализации объектов.
Вместо добавления строки к другой, я бы использовал [NSString stringWithFormat:]
NSString *name = [NSString stringWithUTF8String:user.name];
str = [NSString stringWithFormat: @"Name: %@", name];
Вы даже можете написать код в одну строку.
str = [NSString stringWithFormat: @"Name: %@", [NSString stringWithUTF8String:user.name]];