Обновление и сохранение данных в plist

Я делаю игру для iOS и мне нужно сохранить наивысший уровень, которого достиг игрок. Я могу успешно изменить элемент данных в списке, но по какой-то причине эти данные возвращаются к своему первоначальному значению при каждом перезапуске игры. Вот основной поток моего кода:

В инициации игры получите самый высокий уровень, которого достиг игрок (исходное значение равно 1).

pData = [[PlayerData alloc] init];
currentLevel = [[pData.data valueForKey:@"Highest Level"] intValue];
[self startNewLevel:currentLevel];

& APOS; данные & APOS; NSMutableDictionary, который инициализируется следующим образом в PlayerData:

self.data = [NSMutableDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"playerdata" ofType:@"plist"]];

позже, если игрок побеждает самый высокий уровень, я увеличиваю «самый высокий уровень». значение и запись в файл, вызывая эту функцию в PlayerData:

-(void) newHighestLevel:(NSString*)path :(int)level{
     [self.data setValue:[NSNumber numberWithInt:level] forKey:path];
     [self.data writeToFile:@"playerdata.plist" atomically:YES]

Я знаю, что все это работает, потому что у меня есть меню уровней, к которому игрок может получить доступ во время игры. Каждый раз, когда игрок нажимает кнопку меню уровня, создается подкласс UITableView, который отображает уровень от 1 до самого высокого достигнутого уровня. Инициализация выглядит так:

levelMenu = [[LevelMenu alloc] init:[[pData.data valueForKey:@"Highest Level"] intValue]];

Меню уровней отображает правильное количество уровней во время игры (например, если игрок не прошел ни одного уровня и переходит в меню уровней, оно просто отображает «уровень 1»; но если игрок бьет уровень 1 и переходит к в меню уровня отображаются «уровень 1» и «уровень 2»). Однако всякий раз, когда приложение закрывается или пользователь выходит из главного меню игр, значение «самый высокий уровень» возвращается к 1 и этот код:

currentLevel = [[pData.data valueForKey:@"Highest Level"] intValue];

всегда устанавливает currentLevel на 1, когда игрок запускает старт, независимо от того, сколько уровней пользователь пробил во время игры.

Почему значение меняется обратно? Я пропускаю что-то, что сделало бы мои правки списков постоянными?

РЕДАКТИРОВАТЬ:

вот мой новый 'newHighestLevel & apos; метод:

-(void) newHighestLevel:(NSString*)path :(int)level{
    [self.data setValue:[NSNumber numberWithInt:level] forKey:path];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
    NSString *docfilePath = [basePath stringByAppendingPathComponent:@"playerdata.plist"];
    [self.data writeToFile:docfilePath atomically:YES];
    self.data = [NSMutableDictionary dictionaryWithContentsOfFile:docfilePath];
    BOOL write = [self.data writeToFile:docfilePath atomically:YES];
}

write устанавливается в YES. Если я изменю «docfilePath» на @ & quot; playerdata.plist & quot ;, ему присваивается значение NO. Кажется, ничего не меняется с игрой в любом случае.

РЕШЕНИЕ:

-(void) newHighestLevel:(NSString*)path :(int)level{
      [self.data setValue:[NSNumber numberWithInt:level] forKey:path];
      NSString *basePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
      NSString *docfilePath = [basePath stringByAppendingPathComponent:@"playerdata.plist"];
      [self.data writeToFile:docfilePath atomically:YES];
}

и в init

-(id) init{

     NSString *basePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
     NSString *docfilePath = [basePath stringByAppendingPathComponent:@"playerdata.plist"];
     NSFileManager *fileManager = [NSFileManager defaultManager];
     if (![fileManager fileExistsAtPath:docfilePath]){
         NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"playerdata" ofType:@"plist"];
         [fileManager copyItemAtPath:sourcePath toPath:docfilePath error:nil];
     }
     self.data = [NSMutableDictionary dictionaryWithContentsOfFile:docfilePath];
     return self;
}

Ответы на вопрос(2)

Ваш ответ на вопрос