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

Iphone 当检测到抖动时,从另一个类调用方法,iphone,objective-c,class,private,shake,Iphone,Objective C,Class,Private,Shake,代码如下: 我是一个Obj C新手,所以我搜索了很多,但没有找到任何可以解决我问题的方法 我有CalculatorViewController.h和.m,然后是CalculatorBrain.h和.m(斯坦福讲座) 在CalculatorBrain.m中,我有以下方法,所有变量都在CalculatorBrain头中定义为private - (void)clearEverythingOnShakeGesture{ operand = 0; waitingOperation = @"

代码如下:

我是一个Obj C新手,所以我搜索了很多,但没有找到任何可以解决我问题的方法

我有CalculatorViewController.h和.m,然后是CalculatorBrain.h和.m(斯坦福讲座)

在CalculatorBrain.m中,我有以下方法,所有变量都在CalculatorBrain头中定义为private

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

    }
}
我不知道如何调用
[大脑清除一切动作],因为我得到错误“未找到类方法+ClearEverythingOnShake手势,默认为返回类型id”。但是,如果我将其设置为类方法,则其中的变量是实例变量,这提供了另一个错误。非常感谢您的帮助。

您是否正在导入CalculatorBrain.h?另外,通过在getter中构建CalculatorBrain,您使用了一个很好的惰性初始化模式,但是您没有在motionstart:方法中调用getter。尝试[self.brain clear everything…]获取大脑实例


我在代码中没有看到任何让编译器认为您有类方法的东西。所以这很神秘。请仔细检查标题导入。你是对的,一切都清楚。。。应该是实例方法。

上面评论中发布的项目的AppDelegate正在从nib构建计算器视图控制器,然后立即释放它。应用程序部分运行,但要在抖动手势上清除的UILabel属性此时为空


另外,在私有类别中声明私有属性,用下划线别名合成它们,并在合成方法之外将它们称为self.property也是一种很好的做法。

两个建议:1。使方法保持静态。2.使用[self.brain clearEverythingAnshake手势]。您是否尝试过[self.brain clearEverythingAnshake手势]?为了消除关于“大脑”是什么的任何模糊性,我会这样合成它:@synthesis brain=\u brain。我已经照你说的做了,我不再犯错误了。但是,当我在模拟器中选择抖动手势时,计算器不会自行清除。我知道ClearEverythingOnShake手势本身的方法是有效的,因为当我通过使用按钮调用它时,效果很好。你是说MotionStarted:在模拟摇动手势时不调用吗?如果是的话,你会在日志中看到摇晃信息。看一看你的代码,看看有没有震动。我在日志中看到了消息,所以我知道震动是有效的。问题是,当检测到震动时,其他任何东西都不起作用。这里是项目,如果你想快速测试它。我们将不胜感激@AlexG查看并修复了您的项目。问题不在于摇动姿势,而在于当时主笔尖和cal笔尖的组织方式。我想把它贴在minus.com上,但它不允许我上传文件夹。