Valor de retorno incorrecto de la función (¿Probablemente el "tipo" de cadena incorrecto?)

Tengo una función que debería devolver un int.

- (int)function:(NSString *)input
{
 if (input == @"test1")
    {
        return 0;  
    }
 if (input == @"test2")
    {
        return 1;  
    }
 if (input == @"test3")
    {
        return 2;  
    }
 else
{
    return 3;
}
}

Aquí llamo a la función:

[self function:self.detailItem.type]

El depurador muestra input __NSCFString * 0x6b9a0b0 y devuelve cualquier 29938idontknow.

Si llamo [self function:@"test1"] todo funciona bien.

La detailItemes tipo de TVel cual es un NSManagedObjectcon el atributo type define como string. Debería haber un problema con el string-tipos?

¡Gracias!

preguntado el 08 de noviembre de 11 a las 11:11

Pruebe [input isEqualToString: "xxx"] para comparar cadenas. -

2 Respuestas

Debería comparar NSString así:

if ([input isEqualToString:@"test1"])
{
    // Some code here
}

respondido 08 nov., 11:15

Compruebe que self.detailItem.type sea un NSString:

if ([self.detailItem.type isKindOfClass:[NSString class]])

antes de llamar

[self function:self.detailItem.type]

y comparar cadenas como esta

[input isEqualToString:@"test1"];

actualmente está comparando direcciones de memoria, que en este caso siempre serán diferentes, debería comparar las cadenas que contienen.

respondido 08 nov., 11:15

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.