2013-01-21 7 views
9

Ich habe eine NSMutableArray (_theListOfAllQuestions), die ich mit Zahlen aus einer Datei bevölkere. Dann habe ich die Objekte in diesem Array mit qNr (NSString) verglichen und einen Fehler bekommen. Ich habe sogar das Array zu einem anderen NSString, _checkQuestions gegossen, nur um sicher zu sein, dass ich NSStrings vergleiche. Ich habe auch Artikel getestet, um sie zu vergleichen.Warum erhalte ich einen Fehler beim Vergleich von NSString? (- [__ NSCFNumber isEqualToString:]: unerkannter Selektor an Instanz gesendet)

-(void)read_A_Question:(NSString *)qNr { 
NSLog(@"read_A_Question: %@", qNr); 
int counter = 0; 
for (NSString *item in _theListOfAllQuestions) { 
    NSLog(@"item: %@", item); 
    _checkQuestions = _theListOfAllQuestions[counter]; //_checkQuestion = NSString 
    NSLog(@"_checkQuestions: %@", _checkQuestions); 
    if ([_checkQuestions isEqualToString:qNr]) { 
     NSLog(@">>HIT<<"); 
     exit(0); //Just for the testing 
    } 
    counter++; 
} 

Wenn dieser Code ausgeführt wird i die folgende NSLog erhalten:

read_A_Question: 421 
item: 1193 
_checkQuestions: 1193 

... und Fehler:

-[__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x9246d80 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x9246d80'

Ich glaube, dass ich noch NSString mit einer Reihe von einigen Vergleich Sortieren, aber für mich sieht es so aus, als würde ich NSString vs NSString vergleichen?

Ich könnte hier wirklich Hilfe brauchen, 1) das Problem zu verstehen, 2) das Problem zu lösen?

+0

Nun hilft dann '_checkQuestions', in mindestens Ein Fall ist eine 'NSNummer' und keine' NSString' . Was genau ist in '_theListOfAllQuestions'? Und wie wird das bevölkert? –

Antwort

15

Ersetzen Sie diese Zeile

if ([_checkQuestions isEqualToString:qNr]) 

mit

if ([[NSString stringWithFormat:@"%@",_checkQuestions] isEqualToString:[NSString stringWithFormat:@"%@",qNr]]) 

Hoffe, dass es Ihnen ..

+2

Es gibt keine Notwendigkeit für 'stringWithFormat', da' NSNumber' bereits eine Eigenschaft '-stringValue' hat, die die Zahl als String zurückgibt. –

+0

@yulz Ich weiß nicht den Datentyp von _checkQuestions und es gibt keinen Schaden bei der Verwendung von stringWithFormat .. –

+0

@ Praatek, das hat es DANKE. – PeterK

2

Ihr _theListOfAllQuestions Array hat NSNumber Objekte und nicht NSString Objekte. Sie können also isEqualToString nicht direkt verwenden.

die Sie interessieren,

for (NSString *item in _theListOfAllQuestions) { 
    NSLog(@"item: %@", item); 
    _checkQuestions = _theListOfAllQuestions[counter]; //_checkQuestion = NSString 
    NSLog(@"_checkQuestions: %@", _checkQuestions); 
    if ([[_checkQuestions stringValue] isEqualToString:qNr]) { 
     NSLog(@">>HIT<<"); 
     exit(0); //Just for the testing 
    } 
    counter++; 
} 
+0

ABC, versuchte dies auch früher und bekam "No visible @interface for 'NSString' deklariert den Selektor 'stringValue'" – PeterK

+0

Das liegt daran, dass Sie '_checkQuestions' als NSNumber und nicht NSSString deklarieren sollten. Ihr Array hat NSNumbers und keine Zeichenfolge. Die Verwendung von '[NSString stringWithFormat: @"% @ ", _ checkQuestions]' wird in diesem Fall nicht empfohlen. Das wird später zu unerwarteten Ergebnissen führen. – iDev

+1

Setzen Sie _checkQuestions auf 'NSNumber'. Sie können entweder "_ (NSNumber *) _ checkQuestions stringValue]' in Ihre if-Anweisung eingeben oder den Typ, bei dem Sie _checkQuestions auf NSNumber –

Verwandte Themen