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?
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;
NSAttributtedString
inclut une propriété .string
. De là, vous pouvez prendre NSString
sans attributs.
Alors:
NSAttributtedString* someString;
NSString* string = someString.string;
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];