我是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”。但是,如果我将它设为类方法,则内部变量是实例变量,这会提供另一个错误。非常感谢任何帮助。
答案 0 :(得分:0)
你是#importing the CalculatorBrain.h吗?此外,您通过在getter中构建CalculatorBrain来使用一个很好的延迟初始化模式,但是您没有在motionBegan:方法中调用getter。尝试[self.brain clearEverything ...]来获取大脑实例。
我没有在代码中看到任何会让编译器认为你有类方法的东西。这太神秘了。请仔细检查标题导入。你是正确的,clearEverything ...应该是一个实例方法。
答案 1 :(得分:0)
上面评论中发布的项目AppDelegate是从笔尖构建计算器视图控制器,然后立即释放它。该应用程序部分功能,但在摇晃手势上清除的UILabel属性在此时被清除。
此外,最好在私有类别中声明私有属性,使用_underscore别名合成它们,并在合成方法之外将它们称为self.property。