Запись более одной строки данных в каждый plist

Мои рекорды в игре cocos2d записываются в plist. Каждый раз, когда я захожу в plist, записывается только одна строка данных, каждый раз, когда я пишу в plist, он перезаписывает предыдущие данные?

Вот мой код для записи в мой plist:

-(void)writeToPlistHighScore {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *filePath = [NSString stringWithFormat:@"%@/%@",documentsDirectory,@"HighScore.plist"];
    NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] init];

    [plistDict setObject:[NSNumber numberWithInteger:scoreNumber] forKey:@"Level2_HighScore"];
    [plistDict writeToFile:filePath atomically: YES];
    NSLog(@"HighScore wrote: %i", HighScore);
}

person mattblessed    schedule 30.01.2012    source источник


Ответы (1)


Это потому, что вы каждый раз создаете новый пустой NSDictionary. Затем вы добавляете один балл и сохраняете этот словарь.

Вам нужно инициализировать ваш словарь с помощью существующего plist, чтобы словарь загружал существующие рекорды:

NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile: writeToFile:filePath];

// if dictionary is nil the highscore file doesn't exist yet
if (plistDict == nil)
    plistDict = [[NSMutableDictionary alloc] init];

Кроме того, не забудьте освободить словарь, когда закончите! Прямо сейчас у вас происходит утечка памяти.

[plistDict release];
person LearnCocos2D    schedule 30.01.2012