检测到抖动时,从另一个类调用方法

时间:2012-03-25 00:08:49

标签: iphone objective-c class private shake

这是代码:http://min.us/mWdMO0n14

我是Obj C的新手,所以我搜索了很多,但没有找到任何可以解决我问题的东西。

我有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”。但是,如果我将它设为类方法,则内部变量是实例变量,这会提供另一个错误。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

你是#importing the CalculatorBrain.h吗?此外,您通过在getter中构建CalculatorBrain来使用一个很好的延迟初始化模式,但是您没有在motionBegan:方法中调用getter。尝试[self.brain clearEverything ...]来获取大脑实例。

我没有在代码中看到任何会让编译器认为你有类方法的东西。这太神秘了。请仔细检查标题导入。你是正确的,clearEverything ...应该是一个实例方法。

答案 1 :(得分:0)

上面评论中发布的项目AppDelegate是从笔尖构建计算器视图控制器,然后立即释放它。该应用程序部分功能,但在摇晃手势上清除的UILabel属性在此时被清除。

此外,最好在私有类别中声明私有属性,使用_underscore别名合成它们,并在合成方法之外将它们称为self.property。