【问题标题】:iOS 7 How to use NSUserDefaults to save an NSNumber?iOS 7 如何使用 NSUserDefaults 保存 NSNumber?
【发布时间】:2013-12-28 18:56:49
【问题描述】:

我一直在尝试使用 NSUserDefaults 来保存玩家在我的游戏中所处的级别。

我一直在互联网上查找,似乎您将一个对象保存在应用程序委托文件中的“-(void)didEnterBackground:(UIApplication)application”中,每当您启动一个新项目时它都会为您提供。

然后你可以在它给你的'-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions'中加载保存的对象。 (对不起,我不知道我是编程新手)。

如果我输入:

     //In appDelegate.m, to save the data 

     -(void)didEnterBackground:(UIApplication)application
     {
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
     [defaults setObject:levelCounter forKey:@"levelCounterKey";
     [defaults synchronize];
     }

     //also in appDelegate.m, to load the data
     - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:                (NSDictionary *)launchOptions
     {
     NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
     NSNumber *levelCounter = [defaults objectForKey:@"levelCounterKey";

显然这应该可以,但是当我这样做时,它似乎没有保存级别的值,每当我再次运行应用程序时 levelCounter 变量为 0,尽管事实上当我停止运行应用程序时它是 1 或 2。

如果有帮助,我正在使用 sprite kit 并且目前在模拟器中运行它。

任何建议将不胜感激。

感谢您的时间和精力。

【问题讨论】:

  • 您是否复制并粘贴了您的代码?缺少几个“]”
  • levelCounter 未定义 + 仅当应用程序设置在后台时才保存。不是在应用程序被杀死时。否则你关于NSUserDefault 的代码似乎没问题

标签: ios iphone objective-c ios7 sprite-kit


【解决方案1】:

不要将关卡保存在didEnterBackground: 中。它可能不会被调用。如果您的应用程序被终止或崩溃并且用户将失去他的进度。在他完成一个关卡或加载一个新关卡后立即保存它。

【讨论】:

    【解决方案2】:

    使用

    – floatForKey:  
    – integerForKey:  
    – doubleForKey:
    

    以及相应的设置器。

    【讨论】:

      【解决方案3】:

      您的代码看起来应该可以工作。如果您查看您的应用程序的模拟器目录,在Library/Preferences 下,您可以找到 NSUserDefaults 写入的 plist 文件 - 在那里您可以看到应用程序暂停时实际写入的内容。

      【讨论】:

        猜你喜欢
        • 2013-04-16
        • 2013-10-09
        • 1970-01-01
        • 1970-01-01
        • 2012-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多