2012-03-25 6 views
0

hier ist der Code: http://min.us/mWdMO0n14von einer anderen Klasse eine Methode aufrufen, wenn Shake erkannt wird

Ich bin ein Neuling Obj C, also habe ich ziemlich viel gesucht, haben aber nichts gefunden, das lösen kann meine Problem.

Ich habe CalculatorViewController.h und .m und dann CalculatorBrain.h and.m (Stanford Lectures)

in CalculatorBrain.m, ich habe die folgende Methode, mit allen Variablen als privat in der CalculatorBrain definiert Header.

Dann in CalculatorBrain.m, habe ich alles eingerichtet, um Shakes zu erkennen, wie folgt. Ich habe etwas Code oberhalb der Shake-Erkennung eingefügt, damit Sie eine allgemeine Idee haben.

@interface CalculatorViewController() 
@property(nonatomic, retain) CalculatorBrain *brain; 
@end 

@implementation CalculatorViewController 

@synthesize brain; 
- (CalculatorBrain *)brain { 
    if (!brain) { 
     brain = [[CalculatorBrain alloc] init]; 
    } 
    return brain; 
} 

-(BOOL)canBecomeFirstResponder{ 
    return YES; 
} 

-(void)viewDidAppear: (BOOL) animated{ 
    [super viewDidAppear:animated]; 
    [self becomeFirstResponder]; 
} 

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event { 
    if (event.subtype == UIEventSubtypeMotionShake) 
    { 
     NSLog(@"SHAKE IT!"); 
     [brain clearEverythingOnShakeGesture]; //********** not sure how to call this. 

    } 
} 

Ich bin nicht sicher, wie [brain clearEverythingOnShakeGesture]; nennen, weil ich den Fehler „Klasse Methode + clearEverythingOnShakeGesture nicht gefunden, Standardwerte Typ id zurückzukehren“ bekommen. Wenn ich es jedoch zu einer Klassenmethode mache, sind die darin enthaltenen Variablen Instanzvariablen, was einen weiteren Fehler liefert. Jede Hilfe sehr geschätzt.

+0

Zwei Vorschläge: 1. Machen Sie die Methode statisch. 2. Verwende [self.brain clearEverythingOnShakeGesture]. – David

+0

Haben Sie versucht [self.brain clearEverythingOnShakeGesture]; ? Um jegliche Unklarheit darüber zu beseitigen, was "Gehirn" ist, würde ich es so synthetisieren: @synthesize brain = _brain; . –

Antwort

0

Das AppDelegate des Projekts, das im obigen Kommentar gepostet wird, baut den Taschenrechneransicht-Controller von einer Spitze auf und gibt sie dann sofort frei. Die App funktioniert teilweise, aber die UILabel-Eigenschaft, die bei der Shake-Geste gelöscht werden soll, wird an diesem Punkt auf Null gesetzt.

Es ist auch eine gute Vorgehensweise, private Eigenschaften in der privaten Kategorie zu deklarieren, sie mit _underscore-Aliasen zu synthetisieren und sie außerhalb von synthetisierten Methoden als self.property zu bezeichnen.

+0

Danke nochmal :) – Alex

0

Importieren Sie CalculatorBrain.h? Außerdem verwenden Sie ein nettes lazy-Initialisierungsmuster, indem Sie CalculatorBrain im Getter erstellen, aber Sie rufen den Getter nicht in der motionBegan: -Methode auf. Probiere [self.brain clearEverything ...] aus, um die Gehirninstanz zu erhalten.

Ich sehe nichts im Code, der den Compiler glauben lässt, dass Sie eine Klassenmethode haben. Das ist also mysteriös. Bitte überprüfen Sie den Header-Import. Du hast Recht, dass das clearEverything ... eine Instanzmethode sein sollte.

+0

Ich habe getan, was Sie gesagt haben, und ich bekomme den Fehler nicht mehr. Wenn ich jedoch die Shake-Geste im Simulator auswähle, löscht sich der Rechner nicht selbst. Ich kenne die Methode clearEverythingOnShakeGesture selbst, denn wenn ich sie über einen Button anrufe, funktioniert es gut. – Alex

+0

Willst du sagen motionBegan: wird nicht aufgerufen, wenn du die Shake-Geste simulierst? Sie würden die SHAKE IT-Nachricht im Protokoll sehen, wenn dies der Fall wäre. Werfen Sie einen Blick auf http://stackoverflow.com/questions/150446/how-do-i-detect-when-someone-shakes-an-iphone, um Ihren Code für den Shake zu überprüfen. – danh

+0

Ich sehe die Nachricht im Log, damit ich weiß, dass der Shake funktioniert. Das Problem ist, dass nichts anderes funktioniert, wenn der Shake erkannt wird. Hier ist das Projekt, wenn Sie es schnell testen möchten. Es würde sehr geschätzt werden. http://min.us/mWdMO0n14 – Alex

Verwandte Themen