0

我有一个具有下一个结构的 plist:

-root (dictionary)
  -windows (array)

我需要像这样将项目添加到行窗口中:

-root (dictionary)
  -windows (array)
    -item0 value 1
    -item1 value 2

我有这些行:

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"Windows.plist"];

    NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile: path];
    [data setObject:idWindow forKey:@"Windows"];

    [data writeToFile: path atomically:YES];

但他们只将 Window 行的类型更改为字符串并写入我插入的最后一个值。

我怎样才能做到这一点?

坦克

4

1 回答 1

1

data是一个 NSMutableDictionary。所以我们得到关键“windows”的数组,如下所示:

NSMutableArray *windowsArray=[data objectForKey:@"windows"];

然后你可以像这样添加到这个数组中:

[windowsArray addObject:myString];

在您的代码中,当您[data setObject:idWindow forKey:@"Windows"];使用对象 idWindow 替换整个 windows 数组时。这就是为什么你最终只得到最后一个字符串的原因。

以下是一个完整的代码片段,它从应用程序包中读取一个 plist,在 windows 数组中添加 2 个字符串并将其保存在文档目录中:

NSMutableDictionary *data=[NSMutableDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"EmptyWindows" ofType:@"plist"]];
NSLog(@"data: %@", data);

NSMutableArray *windowsArray=[data objectForKey:@"windows"];
NSLog(@"windows: %@", windowsArray);

[windowsArray addObject:@"TestString1"];
[windowsArray addObject:@"TestString2"];
NSLog(@"windows after add: %@", windowsArray);

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"Windows.plist"];
[data writeToFile:path atomically:YES];

希望这可以帮助。

于 2013-10-17T20:52:16.760 回答