Обычно делегирование является хорошим примером для этого, поскольку это «самый чистый» способ. Все интерфейсы имеют дизайн и т. Д.
Проблема в этом случае будет заключаться в том, что при запуске делегата tableview вам необходимо установить (ваш) делегат аудиоплеера. Поэтому вам понадобится ссылка на аудиоплеер где-то еще в вашем коде. По этой причине я бы предложил использовать одноэлемент.
Последний шаблон, о котором я хотел бы поговорить, будет использовать оповещения (NSNotificationCenter + NSNotification). Обычно вы не просто хотите управлять своим аудиоплеером, когда пользователь выбирает новый заголовок и т. Д., Но также имеют другие вещи, такие как обновление плейлиста, просмотр обновления, отображающий, что происходит и т. Д.
Если все это все в разных частях вашего кода (и не контролируется напрямую вашим аудиоплеером), уведомления также будут очень полезными!
Для лучшей практики я бы предложил: Контролируйте весь свой код для отображения и управления плейлистом из центрального синглтона. Если это не то, что вы сделали, используйте уведомления!
Если вы не знаете, как работает NSNotificationCenter, вот короткий пример кода:
[[NSNotificationCenter defaultCenter] postNotificationName:@"START_MUSIC" object:nil userInfo:nil];
Это разместит уведомление всех слушателей ждут уведомлений под названием @"START_MUSIC"
. Если вам нужно предоставить дополнительные данные, например, какую песню выбрать и т. Д., Вы можете создать NSDictionary
и добавить его в userInfo
-параметр (в этом случае я оставил его в нуле)
Затем в другом классе, где вы хотите получить это уведомление, вы звоните
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(startMusic:) name:@"START_MUSIC" object:nil];
И вы должны реализовать
- (void)startMusic:(NSNotification *)notification
{
// if you provided some extra information, this is where you get your dictionary!
NSDictionary* userInfo = notification.userInfo;
}
вы также должны прекратить прослушивание уведомлений, когда этот объект быть высвобождены!Поэтому добавьте в ваш -(void)dealloc
метод:
- (void)dealloc
{
// rest of your dealloc code!
[[NSNotificationCenter defaultCenter] removeObserver:self];
// if not using ARC:
// [super dealloc]
}
В общем, если вы хотите, чтобы остановить прослушивание уведомлений вы можете использовать -(void)removeObserver:(id)observer
методы центра уведомлений или другой более подробных один раз (например, прекратить прослушивание для конкретного уведомления). Если вы просто вызываете этот общий метод, вы перестаете прослушивать все уведомления с этим объектом.
Отлично подходит для такого простого примера. Я думаю, я поеду с шаблоном singleton и попробую центр уведомлений для тестирования. Благодаря! :) – user3185856
без проблем мат. если вы столкнетесь с любыми препятствиями, дайте мне знать –
Эй, я забыл упомянуть, вы должны удалить текущий объект в качестве наблюдателя в методе dealloc вашего объекта! –