Запись нового набора данных в Plist вместо перезаписи - PullRequest
2 голосов
/ 11 января 2012

Я пытаюсь получить список для хранения нескольких наборов данных, но каждый раз, когда я сохраняю (используя кнопку из ActionSheet), он перезаписывает предыдущий набор.Я хочу добавить несколько «друзей» и их данные.Я не слишком заинтересован в использовании Core Data, поэтому мне интересно, как вы можете сделать это с помощью Plist.

Вот код для кнопки сохранения:

        NSMutableDictionary *friend = [[NSMutableDictionary alloc] init];

        NSMutableDictionary *array = [[NSMutableDictionary alloc]init];
        [array setObject:friendName.text forKey:@"Name"];
        [array setObject:friendPhone.text forKey:@"Phone Number"];
        [array setObject:friendEmail.text forKey:@"Email Address"];
        [array setObject:friendChatSN.text forKey:@"Chat Screen Name"];

        [friend setValue:array forKey: @"Friend Data"];


        NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);

        NSString *documentsPath = [paths objectAtIndex:0];

        NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"FriendList.plist"];

        [friend writeToFile:plistPath atomically: TRUE];

Вместоперезаписать его, как я могу изменить код для добавления нового набора данных о друзьях каждый раз, когда я сохраняю?

Ответы [ 2 ]

10 голосов
/ 11 января 2012

Здесь pList ведет себя как один объект.поэтому всякий раз, когда вы пытаетесь написать что-то для plist, оно будет заменено новыми данными.

Похоже, вы хотите сохранить запись нескольких друзей в plist файл.Лучшее решение для вашего вопроса - использовать базовые данные или sqlite.Но если вы хотите добиться этого с помощью plist, то сначала получите старые данные из plist и добавьте новые данные (друзей) к старым, а затем сохраните их в plist.

Согласно вашему требованию вы должны сохранить NSArray с несколькими объектами NSDictionary (запись друга) в pList.

Вот модифицированный код

NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *documentsPath = [paths objectAtIndex:0];

    NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"FriendList.plist"];

    NSMutableArray *friend = [NSMutableArray arrayWithContentsOfFile:plistPath];

    if (nil == friend) {
        friend = [[NSMutableArray alloc] initWithCapacity:0];
    }
    else {
        [friend retain];
    }


    NSMutableDictionary *array = [[NSMutableDictionary alloc]init];
    [array setObject:friendName.text forKey:@"Name"];
    [array setObject:friendPhone.text forKey:@"Phone Number"];
    [array setObject:friendEmail.text forKey:@"Email Address"];
    [array setObject:friendChatSN.text forKey:@"Chat Screen Name"];

    [friend addObject:array];
    [array release];



    [friend writeToFile:plistPath atomically: TRUE];
    [friend release];
0 голосов
/ 11 января 2012

вместо [friend setValue: массив forKey: @ "Friend Data"];используйте вместо @ "Данные друга" уникальный ключ, например имя друга + фамилия (как минимум ...), или каждый раз в вашем словаре будет одна запись.

...