Ich habe den folgenden Code, der eine Berührung auf eine Schaltfläche nimmt und einen Rand um diese Schaltfläche zeichnet, dann stellt sicher, dass alle anderen Schaltflächen keinen Rahmen haben (insgesamt 8 Schaltflächen). Dies ist eine Methode in einer Singleton-Klasse namens AnswerButtons. Dieser Code funktioniert gut.Konvertieren von One-Off-Code zu Methode
- (IBAction)button1WasTouched:(id)sender {
NSLog(@"Hello from button 1");
// retrieve, modify and update clueAnsState
NSMutableArray *newCAS = [[GameData gameData].curData objectForKey:@"clueAnsState"];
[newCAS replaceObjectAtIndex:0
withObject:@"2"];
[[GameData gameData].curData setObject:newCAS
forKey:@"clueAnsState"];
// Highlight the pressed button & make sure other buttons are not highlighted
for (NSInteger idx = 0; idx < 8; idx++) {
NSString *temp = [newCAS objectAtIndex:idx];
if ([temp isEqualToString:@"1"]) {
UIButton *b = [[AnswerButtons answerButtons].buttons objectAtIndex:idx];
[[b layer] setBorderWidth:0.0f];
}
if ([temp isEqualToString:@"2"]) {
UIButton *b = [[AnswerButtons answerButtons].buttons objectAtIndex:idx];
[[b layer] setBorderWidth:2.0f];
}
}
}
Nun, ich brauche für alle 8 Tasten diesen Code zu verwenden, also sollte ich eine Methode mit einem Argument schreiben, die Tastennummer (pos) zu ändern. In der Singletonklasse .m I, die praktisch die gleiche Code ist gesetzt:
- (void)activateAnswerAtPos:(int)pos {
// retrieve, modify and update clueAnsState
NSMutableArray *newCAS = [[GameData gameData].curData objectForKey:@"clueAnsState"];
[newCAS replaceObjectAtIndex:pos
withObject:@"2"];
[[GameData gameData].curData setObject:newCAS
forKey:@"clueAnsState"];
NSLog(@"%@", newCAS);
for (NSInteger idx = 0; idx < 8; idx++) {
NSString *temp = [newCAS objectAtIndex:idx];
if ([temp isEqualToString:@"1"]) {
UIButton *b = [[AnswerButtons answerButtons].buttons objectAtIndex:idx];
[[b layer] setBorderWidth:0.0f];
}
if ([temp isEqualToString:@"2"]) {
UIButton *b = [[AnswerButtons answerButtons].buttons objectAtIndex:idx];
[[b layer] setBorderWidth:2.0f];
}
}
}
Also änderte ich den ersten Code Chunk es ein Aufruf der neuen Methode zu machen:
- (IBAction)button1WasTouched:(id)sender {
NSLog(@"Hello from button 1");
[sender activateAnswerAtPos:0];
}
Leider, ich m etwas falsch zu machen, wie ich die folgende Ausnahme bekomme:
2012-03-30 19:41:40.199 P3[6751:f803] Hello from button 1
2012-03-30 19:41:40.201 P3[6751:f803] -[UIRoundedRectButton activateAnswerAtPos:]: unrecognized selector sent to instance 0x6e709f0
Ich bin mir nicht sicher, was hier vor sich geht; Mehrere Alternativen funktionieren auch nicht und ich denke, dass meine Fehlersuche mich in die falsche Richtung schickt. Was ist falsch an der Art, wie ich diese Methode nenne? Natürlich kann ich die Methode nicht einmal ausführen. TIA.
Verdammt! So einfach. Danke für diese schnelle Antwort, ich bin wieder da und renne wieder. Ich schätze es. –