【发布时间】:2011-12-15 22:32:59
【问题描述】:
因此,对于我的游戏,我保存了用户是否已解锁通电的“布尔”值。为此,我使用 NSUserDefaults。我最初在网上关注了一个关于 NSUserDefaults 的教程,所以让我把我的代码和解释(以下所有代码都在 AppDelegate.m 文件中):
(注意:“save”是一个宏:[NSUserDefaults standardUserDefaults])
powerups = [[NSMutableArray alloc] init];
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"dateKey"] == nil) {
NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys:[NSDate date], @"dateKey", nil];
[save setBool:NO forKey:POWER_1];
[save setBool:NO forKey:POWER_2];
[save setBool:NO forKey:POWER_3];
[save setBool:NO forKey:POWER_4];
[save setBool:NO forKey:POWER_5];
[save setBool:NO forKey:POWER_6];
[save setBool:NO forKey:POWER_7];
[save setBool:NO forKey:POWER_8];
[save setBool:NO forKey:POWER_9];
[save setInteger:0 forKey:@"1HighScore"];
[save setInteger:0 forKey:@"2HighScore"];
[save setInteger:0 forKey:@"3HighScore"];
[save setInteger:0 forKey:@"CumulativeScore"];
[[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"firstrun");
}
所以在上面的代码中,我创建了一个数组,可以从我的游戏中的任何类调用它,它存储所有可用的道具。仅当这是第一次玩游戏时才应调用此“if”语句,因为它会在 NSUserDefaults 中创建所有数据值。注意:我使用越狱的 iPhone 并检查了创建的 .plist 文件。似乎没有任何价值被称为/“dateKey”的价值。教程说这是检查这是否是第一次运行的方法,因为如果日期值不存在,那么它是第一次运行等等。从逻辑上讲,这是有道理的。
现在,鉴于 NSUserDefaults 必须存在,以下代码填充数组,无论它是刚刚“填充”还是之前保存:
if([save boolForKey:POWER_1])
[powerups addObject:POWER_1];
if([save boolForKey:POWER_2])
[powerups addObject:POWER_2];
if([save boolForKey:POWER_3])
[powerups addObject:POWER_3];
if([save boolForKey:POWER_4])
[powerups addObject:POWER_4];
if([save boolForKey:POWER_5])
[powerups addObject:POWER_5];
if([save boolForKey:POWER_6])
[powerups addObject:POWER_6];
if([save boolForKey:POWER_7])
[powerups addObject:POWER_7];
/*if([save boolForKey:POWER_8])
[powerups addObject:POWER_8];*/
if([save boolForKey:POWER_9])
[powerups addObject:POWER_9];
现在,似乎在每次新运行时,第一个“if”语句都是“是”,并且所有值都根据第一个代码框重置......然后导致第二个代码框相应地采取行动并且没有数组填充,因为所有内容都已重置...
这可能与registerDefaults有关吗,甚至有必要调用或使用,因为我很确定这是问题所在?
谢谢大家,希望我很清楚:)
rnc505
【问题讨论】:
-
你是在模拟器还是在设备上测试这个?
-
我在两者上都进行了测试,但这发生在设备上。我似乎无法在模拟器上对此进行正确测试,但显然,无论如何,设备是最重要的。
标签: ios cocos2d-iphone nsuserdefaults uiapplicationdelegate