Подтвердить что ты не робот

Преобразование NSMutableAttributedString в NSString

Не можем ли мы преобразовать NSMutableAttributedString в NSString?

У меня есть два NSMutableAttributedStrings, и я добавляю вторую строку в 1-ое ниже:

[string1 appendAttributedString:string2];

Так как я должен отображать строку1 на ярлыке, я делаю:

self.label1.text = (NSString *)string1;

Я получаю ошибку "unrecognized selector sent to instance".

Я делаю что-то неправильно здесь? Разве это не правильный способ назначить свойство NSMutableAttributedString для текста метки?

4b9b3361

Ответ 1

Вы не можете использовать трансляцию для преобразования объекта из одного типа в другой. Используйте предоставленный метод:

self.label1.text = [string1 string];

Еще лучше, используйте присваиваемую строку:

self.label1.attributedText = string1;

Ответ 2

NSAttributtedString включает свойство .string. Оттуда вы можете взять NSString без атрибутов.

Итак:

NSAttributtedString* someString;
NSString* string = someString.string;

Ответ 3

Помимо ответа @rmaddy, мой случай здесь отличается.

На самом деле я использовал NSMutableAttributedString в разборе JSON для отправки сведений о сервере.

При разборе времени я получил исключение, потому что NSMutableAttributedString содержит информацию о других атрибутах, например color space. Из-за этого он не будет разбираться.

Я пробовал много других способов, но, наконец, получил решение получить строку, используя ниже код:

// "amountString" is NSMutableAttributedString string object

NSMutableAttributedString *mutableString = (NSMutableAttributedString *)amountString;
amountValueString = [mutableString string];
amountValueString = [NSString stringWithFormat:@"%@", amountString];

NSRange fullRange = NSMakeRange(0, amountString.length);
NSAttributedString *attStr = [mutableString attributedSubstringFromRange:fullRange];
NSDictionary *documentAttributes = @{NSDocumentTypeDocumentAttribute:NSPlainTextDocumentType};

NSData *textData = [attStr dataFromRange:fullRange documentAttributes:documentAttributes error:NULL];
NSString *amountValueString = [[NSString alloc] initWithData:textData encoding:NSUTF8StringEncoding];