ottenere una stringa in NSMutableArray: perché non funziona?
-
05-07-2019 - |
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]);
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à.