Вызов метода из другого класса при обнаружении сотрясения - PullRequest
0 голосов
/ 25 марта 2012

ЗДЕСЬ КОД: http://min.us/mWdMO0n14

Я новичок в Obj C, поэтому я немного искал, но не нашел ничего, что могло бы решить мою проблему.

У меня есть CalculatorViewController.h и .m, а затем CalculatorBrain.h and.m (Стэнфордские лекции)

в CalculatorBrain.m, у меня есть следующий метод, все переменные которого определены как частные в CalculatorBrainheader.

- (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 не найден, по умолчанию возвращает идентификатор типа ".Однако, если я сделаю это методом класса, переменные внутри будут переменными экземпляра, что обеспечивает другую ошибку.Любая помощь с благодарностью.

Ответы [ 2 ]

0 голосов
/ 25 марта 2012

AppDelegate проекта, опубликованный в комментарии выше, строит контроллер представления калькулятора из кончика, а затем немедленно его освобождает. Приложение работает частично, но свойство UILabel, которое будет очищено при жесте встряхивания, в этот момент обнуляется.

Также рекомендуется объявлять частные свойства в частной категории, синтезировать их с псевдонимами _underscore и именовать их как self.property вне синтезированных методов.

0 голосов
/ 25 марта 2012

Вы # импортируете CalculatorBrain.h?Кроме того, вы используете хороший ленивый шаблон инициализации, создавая CalculatorBrain в методе получения, но вы не вызываете метод получения в методе motionBegan :.Попробуйте [self.brain clearEverything ...], чтобы получить экземпляр мозга.

Я не вижу в коде ничего, что заставило бы компилятор думать, что у вас есть метод класса.Так что это загадочно.Пожалуйста, дважды проверьте импорт заголовка.Вы правы, что clearEverything ... должен быть методом экземпляра.

...