iOS 7 如何使用 NSUserDefaults 保存 NSNumber?

Posted

技术标签:

【中文标题】iOS 7 如何使用 NSUserDefaults 保存 NSNumber?【英文标题】:iOS 7 How to use NSUserDefaults to save an 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 的代码似乎没问题 查看此链接:jayprakashdubey.blogspot.in/2014/07/nsuserdefault-usage.html 【参考方案1】:

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

【讨论】:

【参考方案2】:

使用

– floatForKey:  
– integerForKey:  
– doubleForKey:

以及相应的设置器。

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于iOS 7 如何使用 NSUserDefaults 保存 NSNumber?的主要内容,如果未能解决你的问题,请参考以下文章

无法保存到 iOS 7.0.2 上的 NSUserDefaults

NSUserDefaults 在 iOS 7 中无法正常工作

如何使用 NSUserDefaults 在 iOS 中保存非属性值?

如何从 Xamarin.iOS 中的 iOS 扩展调用 NSUserDefaults Observer

如何使用 Xcode 9.3 在 iOS 开发设备中检查 [NSUserDefaults standardUserDefaults] [重复]

如何从 Objective C、iOS 中的 NSUserDefaults 获取准确数据?