2009-07-29 3 views
2

Ich habe den Fehler - [NSCFString String]: Unbekannter Selektor zum Beispiel 0x1578c gesendet, wenn Sie diesen Code ausführen Ich verstehe nicht, was ich falsch mache Name ein NSString istZeichenfolge in NSMutableArray abrufen: Warum funktioniert es nicht?

self.searchValues= [[NSMutableArray alloc] init]; 
[email protected]"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]); 

Antwort

3

, Zum einen können Sie lösche die [... stringValue] Nachricht. Es ist nicht notwendig, dass das Objekt bereits eine Zeichenfolge ist. Zweitens sollten Sie% @ anstelle von% s für NSString-Objekte verwenden.

Hinweis:% @ funktioniert für jedes Objekt überhaupt. Versuchen Sie

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

Vertrauen Sie mir, es ist einen Versuch wert.

+0

Vielen Dank! Ich war seit ein paar Stunden dabei lol – Mathieu

2

Es gibt keine "stringValue" -Methode auf NSString, daher der Fehler.

Wenn Sie den Wert wirklich als C-Zeichenfolge wünschen, ist die gewünschte Methode UTF8String. Für Ihren Protokollierungsfall sollten Sie jedoch nur% s in% @ ändern und das NSString-Objekt direkt protokollieren.

1

Es gibt keine Notwendigkeit stringValue in diesem Fall zu verwenden (edit: es ist eigentlich ein Fehler, wie andere geschrieben haben, weil NSString keine stringValue Methode hat).

Das Objekt, das aus Ihrem Wörterbuch kommt, ist bereits ein NSString. Was Sie tun sollten, ist, dass die NSLog-Funktion das Objekt als korrektes Kakaoobjekt behandelt. Der Code dafür ist %@, nicht %s, da %s für C-Style-Strings ist.

Hier ist, wie es aussehen sollte:

self.searchValues = [[NSMutableArray alloc] init]; 
[email protected]"Bob"; 
if(self.name!=nil) 
{ 
    [searchValues addObject: [NSMutableDictionary 
      dictionaryWithObjectsAndKeys:@"Name", @"Label", 
             self.name,@"Value", 
             nil]]; 

    NSLog(@"Array value: %@", [[searchValues objectAtIndex:0] 
           objectForKey:@"Value"]); 
} 
0

Wenn Sie Eigenschaft für Namensvariable haben dann self.name verwenden, wenn eine Operation auszuführen auf sie sonst keine Bedeutung ist Eigentum erklärt.

Verwandte Themen