Преобразование NSMutableAttributedString в NSString
Не можем ли мы преобразовать NSMutableAttributedString
в NSString
?
У меня есть два NSMutableAttributedStrings
, и я добавляю вторую строку в 1-ое ниже:
[string1 appendAttributedString:string2];
Так как я должен отображать строку1 на ярлыке, я делаю:
self.label1.text = (NSString *)string1;
Я получаю ошибку "unrecognized selector sent to instance"
.
Я делаю что-то неправильно здесь? Разве это не правильный способ назначить свойство NSMutableAttributedString
для текста метки?
Ответы
Ответ 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];