Итак, для моей игры я сохраняю значение «bool» независимо от того, разблокировал ли он еще раз. Для этого я использую NSUserDefaults. Я первоначально следовал учебник онлайн о NSUserDefaults поэтому позвольте мне положить мой код и объяснить (весь следующий код находится в файле AppDelegate.m):NSUserDefaults - Сохранение данных для использования и повторного использования - Стирание при каждом новом запуске?
(Примечание: «сохранить» макрос для: [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. ПРИМЕЧАНИЕ. Я использую jailbroken 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
Тестируете это в тренажере или на устройстве? – LearnCocos2D
Я тестирую его на обоих, но это происходит на устройстве. Кажется, я не могу проверить это на симуляторе, но, очевидно, устройство является самым важным. –