recebendo corda em NSMutableArray: Por que não funciona?
-
05-07-2019 - |
Pergunta
Eu tenho o erro - [NSCFString stringValue]: selector não reconhecido enviada à instância 0x1578c ao executar este código Eu não entendo o que estou fazendo de errado nome é um 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]);
Solução
Em primeiro lugar, você pode soltar a mensagem [... stringValue]. Não é necessário, esse objeto já é uma string. Em segundo lugar, você deve usar% @ em vez de% s para NSString objetos.
Nota:% @ funciona para qualquer objeto em tudo, para essa matéria. Tentar
NSLog(@"Array: %@", searchValues);
Trust me, vale a pena tentar.
Outras dicas
Não existe um método "stringValue" na NSString, assim o erro.
Se você realmente quer o valor como um C-string, o método que você quer é UTF8String. Para o seu caso de registro, porém, você deve apenas alterar% s para% @, e registrar o objeto NSString diretamente.
Não há necessidade de uso stringValue
neste caso ( Editar: é realmente um erro, como outros já publicados, porque NSString
não tem um método stringValue
).
O objeto que sai de seu dicionário já é uma NSString
. O que você deve fazer é permitir que a função NSLog
para lidar com o objeto como um objeto de cacau adequada. O código para isso é %@
, não %s
, desde %s
é para cordas de estilo C.
Aqui está como ele deve procurar:
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"]);
}
Se você tem propriedade para variável nome, em seguida, usar self.name ao realizar qualquer operação em que caso contrário não há sentido de declarar a propriedade.