BOOL在init方法中重置为NO

时间:2011-07-14 15:40:28

标签: ios boolean init nsnotifications

我想在UINavigationController的栏中显示一个正在播放的按钮。

我有一个类(NowPlayingManager),用于跟踪当前是否正在播放音频文件。我使用在另一个类(AudioViewController)中发布的通知来指示播放状态。 AudioViewController使用alloc / init创建NowPlayingManager的实例并将其释放。在NowPlayingManager的收到通知的目标中,我将NowPlayingManager的isNowPlaying布尔值设置为YES。

当音频停止播放时,我发送另一个通知,将isNowPlaying bool设置为NO。

但是,每次初始化类时,bool都设置为NO,这是有道理的,因为它是NowPlayingManager的新实例,并且永远不会显示正在播放按钮。

如何让isNowPlaying bool在我的NowPlayingManager的所有实例中持续存在?或者说,我应该让app委托初始化NowPlayingManager而不是AudioViewController,以便只创建一个实例吗?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您应该使用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

}

希望这有帮助!

答案 1 :(得分:0)

您当然可以将isNowPlaying定义为类成员+ (BOOL) isNowPlaying。看到 Objective-C: how to declare a static member that is visible to subclasses?了解有关此内容的更多信息。

但正如你所说,创建一个实例,即单例模式似乎更有用。我建议Matt Galaghers发布关于单身人士及其可下载的SynthesizeSingleton.h的信息:

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