Класс не получает уведомления делегата - PullRequest
1 голос
/ 16 ноября 2009

Я создал класс (TestAccel), который реализует UIAccelerometerDelegate. У меня есть личная переменная в этом классе для UIAccelerometer.

UIAccelerometer *accel;

Класс init выглядит так:

- (id) init:(id)actOnThisInstance{
[self init];
accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = actOnThisInstance;
return self;
}

Вызывающая сторона (ViewController) инициализируется следующим образом

accel = [[Acc alloc]init:self];

TestAccel никогда не получает никаких уведомлений о его реализации shouldAutorotateToInterfaceOrientation. Затем я реализую UIAccelerometerDelegate в вызывающей стороне. Вызывающая сторона получает уведомления, но TestAccel по-прежнему ничего не получает. Есть идеи, что я делаю не так?

Моя цель - создать класс, который сам содержался бы в обработке уведомлений UIAccelerometerDelegate для вызывающего класса. Я бы хотел, чтобы вызывающая сторона не реализовала UIAccelerometerDelegate, но не уверена, возможно ли это.

1 Ответ

1 голос
/ 16 ноября 2009

Вам не нужно передавать объект для назначения в качестве делегата акселерометра, если вы просто хотите назначить «себя». Вы фактически назначаете контроллер представления в качестве делегата (в контроллере представления "self" является контроллером представления).

Возможно, вам не нужно несколько методов init для класса TestAccel. Это всего лишь рекомендация. Конечно, не забудьте сначала вызвать [super init], если вы используете только один метод. Например:

- (id) init {
    if (self = [super init]) {
        // other TestAccel init stuff here
        accel = [UIAccelerometer sharedAccelerometer];
        accel.delegate = self; // assign self as delegate
    }
    return self;
}

И в контроллере представления вы должны выделить и инициировать объект TestAccel (не объект Acc):

accel = [[TestAccel alloc] init];

Кроме того, TestAccel должен реализовывать протокол UIAccelerometerDelegate, а ваш контроллер представления не должен.

UPDATE
Используйте лучший метод кодирования для установки себя в методе init.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...