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] [重复]