2011-04-07 10 views
56

Tengo un NSMutableString, ¿cómo puedo convertirlo a un NSString?Objetivo C: convertir un NSMutableString en NSString

+2

Desde su reciente historial de preguntas (de hoy) parece que se debe obtener su mano uno un libro digno de cacao para obtener una idea básica de cómo funcionan las cosas en ObjC-world. Los libros de Aaron Hillegass son un muy buen comienzo. También consulte http://cocoadevcentral.com/. Más aún: publicando media docena de versiones ligeramente diferentes de, básicamente, la misma pregunta (String-> CSV), de la cual esta pregunta creo que también está relacionada, no le ayudará mucho. . Simplemente estás enviando spam SO y haciendo que la gente eventualmente ignore tus preguntas. – Regexident

+0

En su lugar, debería ir y proporcionar más información para su pregunta inicial si las respuestas proporcionadas no lo ayudaron a usted y las personas intentarán brindarle respuestas más correctas. Una vez que una respuesta resolvió su problema, déle un voto positivo y haga clic en la marca de verificación verde para aceptarlo. De esta forma, otros usuarios con el mismo problema pueden encontrar soluciones validadas mucho, mucho más fáciles y se lo agradecerán más adelante. También aumenta tus posibilidades de obtener respuestas en primer lugar;) – Regexident

+1

sí, tienes razón, lo siento ... intentaré ser menos opresivo – CrazyDev

Respuesta

88

De cualquier vía:

NSString *immutableString = [NSString stringWithString:yourMutableString]; 

o por medio de:

NSString *immutableString = [[yourMutableString copy] autorelease]; 
//Note that calling [foo copy] on a mutable object of which there exists an immutable variant 
//such as NSMutableString, NSMutableArray, NSMutableDictionary from the Foundation framework 
//is expected to return an immutable copy. For a mutable copy call [foo mutableCopy] instead. 

ser una subclase de NSString sin embargo sólo se puede echar a un NSString

NSString *immutableString = yourMutableString; 

haciendo que parezca inmutable, a pesar de que, de hecho, se mantiene mutable.
Muchos métodos realmente devuelven instancias mutables a pesar de ser declaradas para devolver las inmutables.

+1

¡Buena respuesta! Para la última solución, no necesita encasillar, ya que NSMutableString hereda de NSString y siempre puede asignar el tipo de una subclase a un tipo del que hereda sin quejarse el compilador. – Senseful

+0

Punto válido. No sé por qué agregué eso. Fijo. – Regexident

+0

@Regexident me puede decir. si simplemente devuelven 'NSString' (de hecho es' NSMutableString' entonces cuando el usuario modifica el objeto 'NSString', ellos no saben que el objeto en sí será cambiado, ¿no? Así que ¿este trabajo devolverá algún efecto secundario? Gracias :) – hqt

3

NSMutableString es una subclase de NSString, por lo que sólo podría encasillarse que:

NSString *string = (NSString *)mutableString; 

En este caso, string sería un alias de mutalbeString, pero el compilador podría quejarse si se trató de llamar a cualquiera de los métodos mutables en eso.

Además, se podría crear una nueva NSString con el método de la clase:

NSString *string = [NSString stringWithString:mutableString]; 
+0

me puedes decir. si simplemente devuelven NSString (de hecho es NSMutableString, entonces cuando el usuario modifica el objeto NSString, no saben que el objeto en sí mismo se cambiará, ¿no es así? ¿Entonces este trabajo devolverá algún efecto secundario?Gracias :) – hqt

+0

Pero si hay un cambio en la cadena mutable subyacente (a través de la variable mutableString, ¿cambiará de hecho el valor subyacente de la cadena inmutable? Si ambos son punteros al mismo objeto, parece que tendría a. –

Cuestiones relacionadas