Domanda

Ho l'errore - [NSCFString stringValue]: selettore non riconosciuto inviato all'istanza 0x1578c durante l'esecuzione di questo codice Non capisco cosa sto facendo di sbagliato il nome è 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]);
È stato utile?

Soluzione

In primo luogo, è possibile eliminare il messaggio [... stringValue]. Non è necessario, quell'oggetto è già una stringa. In secondo luogo, dovresti usare% @ invece di% s per gli oggetti NSString.

Nota:% @ funziona per qualsiasi oggetto, del resto. Prova

NSLog(@"Array: %@", searchValues);

Fidati di me, vale la pena provare.

Altri suggerimenti

Non esiste " stringValue " metodo su NSString, quindi l'errore.

Se si desidera davvero il valore come stringa C, il metodo desiderato è UTF8String. Tuttavia, per il tuo caso di registrazione, dovresti semplicemente modificare% s in% @ e registrare direttamente l'oggetto NSString.

In questo caso non è necessario utilizzare stringValue ( modifica: è in realtà un errore, come altri hanno pubblicato, perché NSString non ha un metodo stringValue ).

L'oggetto che esce dal dizionario è già un NSString . Quello che dovresti fare è consentire alla funzione NSLog di gestire l'oggetto come un oggetto cacao appropriato. Il codice è % @ , non % s , poiché % s è per stringhe in stile C.

Ecco come dovrebbe apparire:

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 si dispone della proprietà per la variabile name, utilizzare self.name quando si esegue qualsiasi operazione su di essa, altrimenti non ha senso dichiarare la proprietà.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top