2013-10-11 9 views
26

Impossibile convertire NSMutableAttributedString in NSString?Converti NSMutableAttributedString in NSString

Ho due NSMutableAttributedStrings e sto aggiungendo la 2a corda sul primo, come di seguito:

[string1 appendAttributedString:string2];

Dal momento che ho per visualizzare string1 su un'etichetta che faccio:

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

Sono ottenendo l'errore "unrecognized selector sent to instance".

Sto facendo qualcosa di sbagliato qui? Non è questo il modo corretto di assegnare un NSMutableAttributedString alla proprietà text di un'etichetta?

risposta

67

Non è possibile utilizzare un cast per convertire un oggetto da un tipo all'altro. Utilizzare il metodo previsto:

self.label1.text = [string1 string]; 

Meglio ancora, utilizzare la stringa attribuito:

self.label1.attributedText = string1; 
+0

Sì ho appena realizzato l'etichetta è attributedText proprietà pure. Grazie per la risposta però !! :) –

0

parte di @ rmaddy risposta, caso mio è diverso qui.

In realtà ho utilizzato NSMutableAttributedString nell'analisi di JSON per inviare i dettagli sul server.

In fase di parsing ho ottenuto un'eccezione perché NSMutableAttributedString contiene informazioni anche su altri attributi, come color space. Per questo motivo non passerà inosservato.

Ho provato molti altri modi, ma finalmente ho avuto soluzione per ottenere stringa utilizzando il codice qui sotto:

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

NSAttributtedString include una proprietà .string. Da lì, puoi prendere NSString senza attributi.

Quindi:

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

Mi hai salvato amico. mi dispiace StackOverflow non mi permette di revocare questo più di uno. – iNasir