Я разрабатываю игру, которая использует разные контроллеры для каждого уровня. Он должен обнаруживать сотрясение через акселерометр, поэтому он регистрируется как делегат следующим образом:
UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = self;
accel.updateInterval = kUpdateInterval;
Когда уровень заканчивается, этот контроллер освобождается и освобождается. Ранее я получал сбой после того, как этот контроллер был освобожден, потому что я не обнулял делегата на UIAccelerometer (то есть он все еще отправлял события объекту, который теперь освобожден). Итак, теперь внутри dealloc я делаю это:
UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = nil;
Все хорошо, и первый уровень играет без помех. Проблема возникает, когда я перехожу на следующий уровень, создаю новый контроллер уровня и снова запускаю этот первый пакет кода (устанавливая новый контроллер сейчас как делегат). После этого я не получаю никаких звонков от акселерометра.
Итак, вопрос в том, разрешено ли вам иметь только одного делегата на приложение для акселерометра или я что-то упускаю? В документах я не видел ничего, что не позволяло бы устанавливать делегата несколько раз. Я немного новичок в Obj-C, но, насколько я понимаю, делегаты, это не должно быть слишком необычным.
Примечание: я знаю, что в 3.0 я мог просто слушать уведомления о встряхивании. К сожалению, мне нужно что-то еще, чтобы быть первым ответчиком все время, когда меня интересует встряска. Поэтому я не могу просто изменить этот вариант.