【问题标题】:save bool in nsuserdefaults在 nsuserdefaults 中保存布尔值
【发布时间】:2011-08-01 01:04:43
【问题描述】:

当我的应用启动时正在播放音乐:

-(void)playBgMusic {

NSString *path = [[NSBundle mainBundle] pathForResource:@"bgmusic" ofType:@"aif"];
theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];    }

但是如果他再次按下按钮,他应该能够通过按下按钮关闭音乐,音乐应该再次打开。我有:

-(IBAction)check {


if (isquiet == NO) {

    [theAudio stop];

    isquiet = YES;

     defaults = [NSUserDefaults standardUserDefaults];
    [defaults setBool:YES forKey:@"stringKey"];


}

else {

    [self playBgMusic];

    isquiet = NO;

    defaults = [NSUserDefaults standardUserDefaults];
    [defaults setBool:NO forKey:@"stringKey"]; } }

我想我没听懂。现在它在我的第一个 ViewController 中工作,我可以打开和关闭音乐,但是当我在播放音乐时转到另一个 viewController,然后再次返回并按下按钮,音乐不会停止,当我按下它很多次时音乐再次播放并重叠。

还有什么问题?

【问题讨论】:

    标签: objective-c ios4 audio nsuserdefaults boolean


    【解决方案1】:

    斯威夫特:

    保存布尔值:

    UserDefaults.standard.set(true, forKey: "storageKey")
    

    要检索布尔值:

    let boolValue = UserDefaults.standard.bool(forKey: "storageKey")
    

    【讨论】:

      【解决方案2】:

      无需将其包装在 NSNumber 中,有一些方便的方法:

      要设置 BOOL,请使用:

      [userDefaults setBool:YESorNO forKey:@"yourKey"];
      

      要访问它,请使用:

      [userDefaults boolForKey:@"yourKey"];
      

      [编辑以回答您的其他问题]

      不确定您为什么要使用 NSUserDefaults - 对于您想要实现的目标,这似乎没有必要?下面是我对可以开始/停止音乐的按钮所做的:

      -(IBAction)check 
      {
          if (isQuiet)
          {
              // Play music
              // Change the button to indicate it is playing...
          } else 
          {
              // Stop music
              // Change the button to indicate it has stopped...
          }
          // Set your isQuiet to be the opposite of what it was when the button was clicked
          isQuiet = !isQuiet;
      }
      

      【讨论】:

      • 保存作品但现在还是有问题,我编辑了我的问题
      • 这是一个不同的问题,但我已经编辑了我的答案,看看它是否有帮助。看起来您根本不需要使用 NSUserDefaults。
      • 我在编辑之前解释了我的问题的必要性,很抱歉删除它。我有不同的视图控制器。例如,应用程序启动,音乐正在播放,我转到另一个视图控制器并再次返回。在这种情况下,布尔仍然没有。因此,当我此时按下按钮时,音乐将再次开始并重叠。你明白吗?
      • 谢谢,我把你的答案标记为正确,并在这里问了另一个问题:stackoverflow.com/questions/5588209/bool-saving-problem,也许你可以看一下,很好,谢谢。
      • 要接受更改,您需要在设置值后使用[userDefaults synchronize];
      【解决方案3】:

      保存:

      [boolUserDefaults setObject:[NSNUmber numberWithBool:isQuiet] forKey:@"stringKey"];
      

      当你读回它时,把它读成一个 NSNumber 然后做:

      BOOL savedIsQuiet = [theNumberYouSaved boolValue];
      

      【讨论】:

        【解决方案4】:

        将您的 BOOL 值装箱到 NSNumber 对象并将其添加到 NSUserDefault:

        NSUserDefaults *boolUserDefaults = [NSUserDefaults standardUserDefaults];
        [boolUserDefaults setObject:[NSNumber numberWithBool:isquiet] 
                             forKey:@"stringKey"];
        

        稍后您将能够使用 NSUserDefaults 中的 -boolForKey: 函数将该值作为纯 BOOL 检索

        【讨论】:

        • 还有一个setBool 函数,因此不需要将其包装在 NSNumber 中:)
        猜你喜欢
        • 1970-01-01
        • 2012-02-20
        • 2011-04-19
        • 1970-01-01
        • 2015-06-04
        • 2017-08-22
        • 1970-01-01
        • 1970-01-01
        • 2022-08-18
        相关资源
        最近更新 更多