【问题标题】:Writing a new set of data to Plist instead of overwriting it将一组新数据写入 Plist 而不是覆盖它
【发布时间】:2012-02-07 15:54:07
【问题描述】:

我正在尝试获取一个 plist 来存储多组数据,但每次我保存(使用 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];

我如何修改代码以在每次保存时添加一组新的朋友数据,而不是覆盖它?

【问题讨论】:

  • 我错过了什么或 [friend setValue:array forKey: @"Friend Data"];是你的问题吗?您每次在字典中覆盖旧数据,将数组值设置为相同的键...
  • 我知道我正在覆盖它。我对 iOS 很陌生,我不知道如何编写代码来保存一组新值。如果您能更明确一点并修改我的代码,我将不胜感激。

标签: iphone ios nsmutablearray plist save


【解决方案1】:

这里 pList 表现为一个对象。所以每当你尝试写东西到 plist 时,它都会被新数据替换。

看起来您想将多个朋友记录保存到 plist 文件中。您问题的最佳解决方案是使用核心数据或 sqlite。但是如果你想使用 plist 来实现它,那么首先从 plist 中获取旧数据并将新数据(朋友)添加到旧数据然后保存到 plist 应该可以解决。

根据您的要求,您应该将带有多个NSDictionary(朋友记录)对象的NSArray 保存到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];

【讨论】:

  • 谢谢。非常感谢您的帮助。
【解决方案2】:

而不是 [friend setValue:array forKey: @"Friend Data"];使用唯一键代替@“朋友数据”,例如朋友姓名+姓氏(至少...),否则您的字典中每次都会有一个条目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-07
    • 2021-06-30
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2020-01-30
    相关资源
    最近更新 更多