写入plist文件(特别是行/项目)

时间:2013-04-18 06:54:40

标签: ios xcode indexing plist

我有一个具有此结构的.plist文件,

enter image description here

我想添加或替换项目5.我正在使用此代码

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

NSMutableArray *data = [[NSMutableArray alloc] initWithContentsOfFile:path];
NSString *comment = str;
[data replaceObjectAtIndex:1 withObject:comment];
[data writeToFile:path atomically:YES];

NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:path]) {
    NSString *bundle = [[NSBundle mainBundle] pathForResource:@"Introduction" ofType:@"plist"];
    [fileManager copyItemAtPath:bundle toPath:path error:&error];
}

如果我将replaceObjectAtIndex:更改为5,则会更改我的plist结构,而我不希望这样。

如何在特定索引的第5行(第5项)插入/替换文本?

1 个答案:

答案 0 :(得分:4)

您的结构有一个数组数组。

  

[data replaceObjectAtIndex:1 withObject:comment];

通过此代码,您将使用字符串替换索引1处的数组。您是否特别需要插入第5个索引,或者只是需要将其添加到现有子数组中?

 NSMutableArray *subArray = [data[sectionIndex] mutableCopy];
if (!subArray) {
    subArray = [NSMutableArray array];
}

if (rowIndex<[subArray count]) {
    [subArray replaceObjectAtIndex:rowIndex withObject:comment];
}else{
    [subArray addObject:comment];
}

[data replaceObjectAtIndex:sectionIndex withObject:subArray];
[data writeToFile:path atomically:NO];

访问subArray,使其变为可变,并在特定索引处添加或插入。如果您尝试插入,请不要忘记检查索引是否不大于该数组的计数。