obtener cadena en NSMutableArray: ¿Por qué no funciona?
-
05-07-2019 - |
Pregunta
Tengo el error - [NSCFString stringValue]: selector no reconocido enviado a la instancia 0x1578c al ejecutar este código No entiendo que estoy haciendo mal nombre es un NSString
self.searchValues= [[NSMutableArray alloc] init];
name=@"Bob";
if(self.name!=nil)
[searchValues addObject: [NSMutableDictionary dictionaryWithObjectsAndKeys:@"Name",@"Label",self.name,@"Value",nil]];
NSLog(@"Array value : %s",[[[searchValues objectAtIndex:0] objectForKey:@"Value"] stringValue]);
Solución
En primer lugar, puede soltar el mensaje [... stringValue]. No es necesario, ese objeto ya es una cadena. En segundo lugar, debe usar% @ en lugar de% s para los objetos NSString.
Nota:% @ funciona para cualquier objeto, para el caso. Prueba
NSLog(@"Array: %@", searchValues);
Confía en mí, vale la pena intentarlo.
Otros consejos
No hay " stringValue " método en NSString, de ahí el error.
Si realmente desea el valor como una cadena en C, el método que desea es UTF8String. Sin embargo, para su caso de registro, debe cambiar% s a% @ y registrar el objeto NSString directamente.
No es necesario usar stringValue
en este caso ( editar: en realidad es un error, como otros han publicado, porque NSString
no tiene un método stringValue
).
El objeto que sale de su diccionario ya es un NSString
. Lo que debe hacer es permitir que la función NSLog
maneje el objeto como un objeto de cacao adecuado. El código para eso es % @
, no % s
, ya que % s
es para cadenas de estilo C.
Así es como debería verse:
self.searchValues = [[NSMutableArray alloc] init];
name=@"Bob";
if(self.name!=nil)
{
[searchValues addObject: [NSMutableDictionary
dictionaryWithObjectsAndKeys:@"Name", @"Label",
self.name,@"Value",
nil]];
NSLog(@"Array value: %@", [[searchValues objectAtIndex:0]
objectForKey:@"Value"]);
}
Si tiene propiedad para la variable de nombre, use self.name cuando realice cualquier operación en ella, de lo contrario no tiene sentido declarar la propiedad.