2016-05-28 12 views
1

Ich versuche, ein Hangman-Spiel zu machen. Ich weiß, dass meine Methoden wahrscheinlich nicht die effizientesten sind. Grundsätzlich überprüfe ich jedes Mal, wenn ein Buchstabe eingegeben wird, ob noch irgendwelche Leerzeichen übrig sind, damit ich das "Du hast gewonnen!" Anzeigen kann. Bild. Ich bekomme immer zwei Fehler:Receiver-Typ Fehler Obj-C

Receiver type 'char' is not 'id' or interface pointer , consider casting it to 'id'

Thread 1: EXC_BAD_ACCESS (code=1, address=0x63)

Jede Hilfe wird sehr geschätzt.

 BOOL dash = YES; 

     for(int j = 0; j < self.correctWord.length; j++){ 

      char temp = [self.correctWord characterAtIndex:j]; 

      if([temp isEqual:@"-"]) 
       dash = YES; 

     } 

     if(dash == YES) 
      self.hangmanImage.image = [UIImage imageNamed:@"wonimg"]; 

Antwort

2

Die Sache mit Objective-C ist, dass es ein zweiköpfiges Biest ist.

  1. Es gibt Objekte, an die Sie Nachrichten senden.
  2. Es ist klar C. Keine Nachrichten hier, nur Operatoren und Funktionsaufrufe.

Lassen Sie uns den Fehler untersuchen:

Receiver type 'char' is not 'id' or interface pointer , consider casting it to 'id'

Ein "Empfänger" ist, was eine Nachricht empfängt. Eine Verallgemeinerung, die nicht mehr genau ist, ist eine Nachricht, das eckige Klammer Material:

[receiver message] 

oder

[receiver messageArgument1:arg1 argument2:arg2] 

Ein id Typ Begriff der Objective-C „ein beliebiges Objekts“. Der Fehler versucht zu sagen, dass der Empfänger ein char ist, der kein Objekt ist. Es ist ein einfacher C-Typ. Hier ist die Linie mit dem Problem:

if([temp isEqual:@"-"]) 

Für einen einfachen C-Typen, Test Gleichheit mit dem == Betreiber:

if (temp == '-') 
+0

alle richtig außer der letzten Zeile ... 'temp' kann, technisch gesehen, nicht 7-Bit-ASCII-Zeichen sein. Ich würde mich auf eine pure-ObjC-Lösung stützen und einen NSScanner verwenden, um nicht-Buchstaben-Zeichen in der Zeichenfolge (oder etwas) zu erkennen. – bbum

+1

Ja, 'characterAtIndex:' gibt ein 'unichar' und kein' char' zurück. Ein anderer Ansatz wäre stattdessen eine Teilkette der Länge 1 zu nehmen. Dann würden Sie sich mit einem NSString befassen, der ein Objekt ist. –