BOOL сбрасывается в NO в методе init - PullRequest
0 голосов
/ 14 июля 2011

Я хочу показать кнопку «Сейчас исполняется» на панели UINavigationController.

У меня есть класс (NowPlayingManager), который я использую для отслеживания того, воспроизводится ли аудиофайл в данный момент.Я использую уведомление, опубликованное в другом классе (AudioViewController), чтобы указать статус воспроизведения.AudioViewController создает экземпляр NowPlayingManager с помощью alloc / init и освобождает его.В целевом объекте NowPlayingManager полученного уведомления я установил для логического объекта NowPlayingManager isNowPlaying значение YES.

Когда воспроизведение останавливается, я отправляю другое уведомление, устанавливающее значение bool isNowPlaying для NO.

Однако каждый раз, когда классинициализируется bool установлен на NO, что имеет смысл, потому что это новый экземпляр NowPlayingManager и кнопка Now Playing никогда не отображается.

Как получить, чтобы bool isNowPlaying сохранялся во всех экземплярах моего NowPlayingManager?Или, скорее, я должен иметь делегату приложения init NowPlayingManager, а не AudioViewController, чтобы был создан только один экземпляр?

Ответы [ 2 ]

0 голосов
/ 14 июля 2011

Конечно, вы можете определить isNowPlaying как члена класса + (BOOL) isNowPlaying.См. Objective-C: как объявить статический член, который виден подклассам? для получения дополнительной информации об этом.

Но, как вы уже сказали, кажется более полезным создать только одинэкземпляр, то есть шаблон синглтона.Я предлагаю Мэтту Галахерсу написать о синглетах и ​​его загружаемом SynthesizeSingleton.h:

http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html

0 голосов
/ 14 июля 2011

Если я правильно понимаю, вы должны использовать NSUserDefaults.Это запоминается, даже если вы изменили класс, закрыли приложение и т. Д.

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"KeyName"];

И затем проверьте bool с этим:

if ([[NSUserDefaults standardUserDefaults] boolForKey:@"KeyName"] == YES]

{

    //Do whatever you would do when the bool is equal to YES

}

Надеюсь, это поможет!

...