Что вы здесь делаете,
a = [[classA alloc] initWithNibName:nil bundle:nil];
[a.av1 stop];
неправильно. Вы создаете совершенно новый объект, который, по всей вероятности, не воспроизводит музыку и отправляет сообщение stop
своему проигрывателю. Если вы хотите остановить игрока в другом классе, вы должны сохранить ссылку assign
ed другого класса. Если вы хотите сохранить их независимость, вы можете посмотреть уведомления. This
- это исчерпывающее руководство от Apple. По сути, это потребует регистрации A в качестве наблюдателя для уведомления, а затем, когда B будет готов к воспроизведению, он опубликует уведомление о том, что он собирается воспроизводить музыку. Когда A получает это уведомление, оно должно выключить музыку.
Итак, в init
из A
, зарегистрируйтесь как наблюдатель,
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(turnOffMusic:)
name:@"BWillPlayMusicNotification"
object:nil];
и затем, когда объект B готов к воспроизведению музыки, отправьте уведомление,
[[NSNotificationCenter defaultCenter] postNotification:@"BWillPlayMusicNotification"];
Это приведет к тому, что будет вызываться turnOffMusic
А, что в значительной степени сделает,
- (void)turnOffMusic:(NSNotification *)notification {
[self.av1 stop];
}
Не забудьте прекратить прослушивание уведомлений, когда объект освобожден,
[[NSNotificationCenter defaultCenter] removeObserver:self];
Этот подход позволяет вам сохранять оба класса независимыми.