【问题标题】:Add sub Key to plist programmatically以编程方式将子键添加到 plist
【发布时间】:2010-02-08 20:05:37
【问题描述】:

谁能帮我将孩子添加到 plist 中?

我想我想记录 plist 中的行索引,然后说明要写入键的索引行。 我不确定如何判断键是字符串、字典还是数组。

以下是另一个关于向 root 添加密钥的问题的代码。

 NSString *path = @"path/to/some/file";
 NSMutableDictionary *plist = [[NSDictionary dictionaryWithContentsOfFile:path] mutableCopy];
 [plist setObject:@"foo" forKey:@"aKey"];
 [plist writeToFile:path atomically:YES];
 [plist release];

任何帮助将不胜感激:)

【问题讨论】:

    标签: iphone objective-c plist


    【解决方案1】:

    注意:我仍然需要帮助,但取得了进展。

    以下代码将添加一个 plist 数组条目名称“Hi”和子项: 项目 0,测试 1 第1项,测试2

    NSMutableDictionary *plist = [[NSDictionary dictionaryWithContentsOfFile:databasePath] mutableCopy];
    NSMutableArray *newArray = [[[NSMutableArray alloc] init] autorelease];
    newArray = [NSArray arrayWithObjects:@"test1", @"test2", nil];
    [plist setObject:newArray forKey:@"Hi"];
    [plist writeToFile:databasePath atomically:YES];
    [plist release];
    

    我认为制作字典项与数组项的工作方式相同。 我仍然不确定如何将整体添加到孩子中:/

    【讨论】:

    • 只是一个旁注:你分配和初始化 newArray 两次。第二次这样做时,实际上是在使它成为不可变的。这可能不是你的意图。只是: NSMutableArray *newArray = [NSMutableArray arrayWithObjects:@"1", @"2", @"3", nil];会给你一个完美的自动释放可变数组。或者,如果您希望数组不可变(或不打算更改它),请在 NSArray 而不是 NSMutableArray 上调用相同的 arrayWithObjects:。
    【解决方案2】:

    这里是 如果您按照以下方式执行所有操作,则可以写出一个 plist。 字典 -> 数组 -> 字符串 字典 -> 字典 -> 字典 -> 数组 -> 字符串 等等……

    下面的代码创建了一个“行”字典,其中包含一个“Hi”数组,其中包含 2 个字符串,名称为 Item 0 和 Item 1,名称分别为“test 1 和 test 2”。

    NSMutableDictionary *plist = [[NSDictionary dictionaryWithContentsOfFile:databasePath] mutableCopy];
    NSMutableArray *newArray = [[[NSMutableArray alloc] init] autorelease];
    NSMutableDictionary *newDictionary = [[[NSMutableDictionary alloc] init] autorelease];
    newArray = [NSArray arrayWithObjects:@"test1", @"test2", nil];
    newDictionary = [NSDictionary dictionaryWithObject:newArray forKey:@"Hi"];
    [plist setObject:newDictionary forKey:@"Row"];
    [plist writeToFile:databasePath atomically:YES];
    [plist release];
    

    如果您尝试写入已存在 1 的项目,这将崩溃。有谁知道我如何给字符串键(即第 0 项、第 1 项等)命名?

    【讨论】:

      【解决方案3】:

      我相信字符串键名不能改变 一次提供钥匙和物品的唯一方法是 使用 NSDictionary

      [NSArray arrayWithObjects:dictionary1, dictionary2];
      

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-13
        • 2016-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多