0

コードは次のとおりです:http ://min.us/mWdMO0n14

私はObjCの初心者なので、かなり検索しましたが、問題を解決できるものは見つかりませんでした。

CalculatorViewController.hと.mがあり、次にCalculatorBrain.hと.mがあります(スタンフォード大学の講義)

CalculatorBrain.mには、次のメソッドがあり、すべての変数がCalculatorBrainヘッダーでプライベートとして定義されています。

- (void)clearEverythingOnShakeGesture{
    operand = 0;
    waitingOperation = @"";
    waitingOperand = 0;
}

次に、CalculatorBrain.mで、次のように、揺れを検出するようにすべてを設定しました。一般的な考え方がわかるように、手ぶれ検出の上にいくつかのコードを含めました。

@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.

    }
}

[brain clearEverythingOnShakeGesture];「クラスメソッド+clearEverythingOnShakeGestureが見つかりません。デフォルトでタイプIDが返されます」というエラーが表示されるため、呼び出し方法がわかりません。ただし、クラスメソッドにすると、内部の変数はインスタンス変数になり、別のエラーが発生します。どんな助けでも大歓迎です。

4

2 に答える 2

0

CalculatorBrain.hを#インポートしていますか?また、ゲッターでCalculatorBrainを構築することで、怠惰な初期化パターンを使用していますが、motionBegan:メソッドでゲッターを呼び出していません。[self.brain clearEverything ...]を試して、脳のインスタンスを取得してください。

コードには、クラスメソッドがあるとコンパイラに思わせるようなものは何もありません。ですから、それは不思議です。ヘッダーのインポートについて再確認してください。clearEverything...はインスタンスメソッドである必要があります。

于 2012-03-25T00:26:24.130 に答える
0

上記のコメントに投稿されたプロジェクトのAppDelegateは、ペン先から電卓ビューコントローラーを構築し、すぐにリリースします。アプリは部分的に機能しますが、シェイクジェスチャでクリアされるUILabelプロパティはその時点で無効になります。

また、プライベートカテゴリでプライベートプロパティを宣言し、それらを_underscoreエイリアスで合成し、合成されたメソッドの外部でself.propertyとして参照することをお勧めします。

于 2012-03-25T14:24:57.213 に答える