Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何从plist在行类型数组中添加项?_Ios_Objective C_Arrays_Plist - Fatal编程技术网

Ios 如何从plist在行类型数组中添加项?

Ios 如何从plist在行类型数组中添加项?,ios,objective-c,arrays,plist,Ios,Objective C,Arrays,Plist,我有一个具有下一个结构的plist: -root (dictionary) -windows (array) 我需要将项目添加到行窗口中,如下所示: -root (dictionary) -windows (array) -item0 value 1 -item1 value 2 NSMutableArray *windowsArray=[data objectForKey:@"windows"]; [windowsArray addObject:myString]

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

-root (dictionary)
  -windows (array)
我需要将项目添加到行窗口中,如下所示:

-root (dictionary)
  -windows (array)
    -item0 value 1
    -item1 value 2
NSMutableArray *windowsArray=[data objectForKey:@"windows"];
[windowsArray addObject:myString];
我有以下几行:

 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];
但它们只将窗口行的类型更改为字符串,并写入我插入的最后一个值

我该怎么做


坦克

数据
是一个NSMutableDictionary。因此,我们得到键“窗口”的数组,如下所示:

-root (dictionary)
  -windows (array)
    -item0 value 1
    -item1 value 2
NSMutableArray *windowsArray=[data objectForKey:@"windows"];
[windowsArray addObject:myString];
然后,您可以向该阵列添加以下内容:

-root (dictionary)
  -windows (array)
    -item0 value 1
    -item1 value 2
NSMutableArray *windowsArray=[data objectForKey:@"windows"];
[windowsArray addObject:myString];
当您执行
[data setObject:idWindow forKey:@“Windows”]时,在代码中用对象idWindow替换整个windows数组。这就是为什么你最终只得到了最后一根弦

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

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];

希望这能有所帮助。

您好,我已将您提到的行更改为:“NSMutableArray*windowsArray=[[NSMutableArray alloc]initWithArray:[data objectForKey:@“windows”]];”,在plist中要写入的部分中,我更改了这个“[windowsArray writeToFile:path Atomicaly:YES];”,但是工作不正常,现在它将根行更改为数组,并继续存储我输入的最后一个值