web-dev-qa-db-fra.com

Convertir NSMutableAttributedString en NSString

Ne pouvons-nous pas convertir NSMutableAttributedString en NSString?

J'ai deux NSMutableAttributedStrings et j'ajoute la 2ème chaîne à la 1ère comme ci-dessous:

[string1 appendAttributedString:string2];

Depuis que je dois afficher string1 sur une étiquette, je fais:

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

Je reçois une erreur "unrecognized selector sent to instance"

Est-ce que je fais quelque chose de mal ici? N'est-ce pas la bonne façon d'attribuer une NSMutableAttributedString à la propriété text d'une étiquette?

29
tech_human

Vous ne pouvez pas utiliser une conversion pour convertir un objet d'un type à un autre. Utilisez la méthode fournie:

self.label1.text = [string1 string];

Mieux encore, utilisez la chaîne attribuée:

self.label1.attributedText = string1;
71
rmaddy

NSAttributtedString inclut une propriété .string. De là, vous pouvez prendre NSString sans attributs.

Alors:

NSAttributtedString* someString;
NSString* string = someString.string;
14
Juraj Antas

Mis à part la réponse de @ rmaddy, mon cas est différent ici.

En fait, j’ai utilisé NSMutableAttributedString dans l’analyse JSON pour envoyer les détails sur le serveur.

Au moment de l'analyse, j'ai eu une exception car NSMutableAttributedString contient également des informations sur d'autres attributs, comme color space. Pour cette raison, il ne sera pas analysé.

J'ai essayé beaucoup d'autres méthodes, mais j'ai finalement trouvé une solution pour obtenir une chaîne en utilisant le code ci-dessous:

// "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];
0
Kampai