Вы должны абстрагировать звук, воспроизводимый на вашем контроллере представления, так как он на самом деле не связан с функциональностью (и плюс он позволит вам делать то, что вы хотите). Я бы предложил создать одноэлементный объект, функциональность которого заключается в воспроизведении указанной песни, ее приостановке / остановке и получении из нее статусов (таких как isPlaying и т. Д.). Я не собираюсь вдаваться в подробности о том, что такое синглтон / как его создать, поскольку другие сообщения о переполнении стека и быстрый поиск в Google будут давать результаты, однако основная предпосылка заключается в том, что вы создаете класс и добавляете в него этот метод:
+ (id)sharedInstance
{
static dispatch_once_t dispatchOncePredicate = 0;
__strong static id _sharedObject = nil;
dispatch_once(&dispatchOncePredicate, ^{
_sharedObject = [[self alloc] init];
});
return _sharedObject;
}
Затем вы можете создать такой метод:
+ (void)playSongWithFile:(NSString *)fileName
{
// retrieve the file and play it
}
И из любого класса, в который вы # импортируете свой одноэлементный объект, вы можете вызвать:
[[MySingleton sharedInstance] playSongWithFile:@"awesomesong.mp3"];
Одноэлементный объект - это объект, который может быть создан только один раз и «живет» в течение всего времени выполнения вашего приложения, поэтому он будет продолжать делать то, что вы говорите, независимо от того, что происходит с вашими контроллерами представления.