【问题标题】:Adding a new dictionary to my plist file将新字典添加到我的 plist 文件中
【发布时间】:2010-12-01 05:46:05
【问题描述】:

根 ---- 数组
项目 0- 字典
全名 ---- 字符串
地址 ---- 字符串
第 1 项 ---- 字典
全名 ---- 字符串
地址----字符串

我有一个plist,看起来像那个。在视图中,我有一个按钮,点击后我想添加一个新的“项目 2”或 3 或 4 或 5 等...我只想添加更多名称和地址。

今晚我花了 3 个小时寻找完美的例子,但没能找到。 Apple 属性列表样本太深了。我已经看到了可能会接近的代码。

非常感谢

NSMutableDictionary *nameDictionary = [NSMutableDictionary dictionary]; [nameDictionary setValue:@"John Doe" forKey:@"fullName"]; [nameDictionary setValue:@"555 W 1st St" forKey:@"address"];

NSMutableArray *plist = [NSMutableArray arrayWithContentsOfFile:[self dataFilePath]];
[plist addObject:nameDictionary];
[plist writeToFile:[self dataFilePath] atomically:YES];

- (NSString *)dataFilePath { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *path = [documentsDirectory stringByAppendingPathComponent:@"children.plist"]; return path; }

【问题讨论】:

    标签: iphone plist nsdictionary


    【解决方案1】:

    假设 plist 作为文件存储在磁盘上,您可以通过调用 arrayWithContentsOfFile 方法重新打开它并加载新内容。

    // Create the new dictionary that will be inserted into the plist.
    NSMutableDictionary *nameDictionary = [NSMutableDictionary dictionary];
    [nameDictionary setValue:@"John Doe" forKey:@"fullName"];
    [nameDictionary setValue:@"555 W 1st St" forKey:@"address"];
    
    // Open the plist from the filesystem.
    NSMutableArray *plist = [NSMutableArray arrayWithContentsOfFile:@"/path/to/file.plist"];
    if (plist == nil) plist = [NSMutableArray array];
    [plist addObject:nameDictionary];
    [plist writeToFile:@"/path/to/file.plist" atomically:YES];
    

    -(void)addObject:(id)object 始终插入到数组的末尾。如果您需要在特定索引处插入,请使用-(void)insertObject:(id)object atIndex:(NSUInteger)index 方法。

    [plist insertObject:nameDictionary atIndex:2];
    

    【讨论】:

    • 我很困惑。究竟是如何添加“Item #”及其对应的字符串键/值的?请记住,我对 iOS 开发环境完全陌生。
    • 谢谢。这更容易理解。我想知道它如何处理新行。太感谢了。我现在就出去试试。
    • 获取数据超时。变量显示可能不准确。获取数据超时。变量显示可能不准确。获取数据超时。变量显示可能不准确。
    • 这段代码似乎可以工作,但它没有将值放入我项目的 .plist 文件中。我在我的项目的资源“文件夹”中有 children.plist 文件(我存储 png 和 xib 文件的同一个地方)。我的代码是...在我的原始帖子中查看以上内容
    • plist 文件需要存在才能使arrayWithContentsOfFile: 工作。如果不是,则返回值将是nil。我编辑了答案以测试nil
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 2017-05-29
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    相关资源
    最近更新 更多