Так что для моей игры я сохраняю значение "bool" того, разблокировал ли пользователь еще включение.Для этого я использую 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