Pregunta

Quiero enviar una cadena de una clase a la otra:

1) En la clase 1, agrego una propiedad para mantener la cadena:

@property (nonatomic, retain) NSString *str; 

2) y un método para devolver una cadena:


-(NSString *)sendBackStr:(NSString *)strURL
{
    NSString *str = [[NSString alloc] stringWithString:strURL];
    return str;
}

3) En la clase 2, agrego una propiedad para contener la cadena recibida:

@property (nonatomic, retain) NSString *returnStr; 

4) y el siguiente código:

Class1 *c1 = [[Class1 alloc] init]; 
returnStr = [c1 sendBackStr:@"URL"];

Pero el programa se detiene en returnStr = [c1 sendBackStr: @ " URL "]; ¿Alguna idea sobre qué tiene de malo?

¿Fue útil?

Solución

stringWithString es un método de clase que devuelve una cadena lanzada automáticamente. Deberías llamarlo así:

myProperty = [NSString stringWithString:strURL]; 

Aquí asumo que su propiedad hace una copia, para incrementar el conteo de retención en la cadena lanzada automáticamente que se devuelve desde el método stringWithString. (Los objetos devueltos de las llamadas de asignación tienen un recuento de retención de uno y no se lanzan automáticamente). Es más común asignar a las cadenas la propiedad de copia en lugar de la de retención. cadena de propiedad de otra persona.

Lo que tampoco entiendo es por qué escribiste el código así, a menos que sea solo un ejemplo. En la clase 2, todo lo que necesitas hacer es escribir

returnStr = [NSString stringWithString:@"URL"];

Otros consejos

stringWithString: es un mensaje que debe enviarse a la clase NSString, no una instancia de su clase (devuelta a través de alloc).

El código correcto debe ser:

-(NSString *)sendBackStr:(NSString *)strURL
{
    return [NSString stringWithString:strURL];
}

Es posible que desee familiarizarse más con los modismos relacionados con la asignación, la retención y la liberación automática de punteros. Si desea asignar esta cadena por algún motivo y devolverla desde el mensaje sendBackStr: es probable que desee este código:

-(NSString *)sendBackStr:(NSString *)strURL
{
    return [[[NSString alloc] initWithString:strURL] autorelease];
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top