gpt4 book ai didi

objective-c - 对于包含字典数组的 plist,如何添加和写出新的字典元素

转载 作者:行者123 更新时间:2023-11-29 05:02:51 25 4
gpt4 key购买 nike

我创建了一个 plist,它被初始化为字典数组的数组。 plist 存储动态数据。因此,当应用程序终止时,可能需要添加新的字典元素。或者可能需要添加新的字典元素数组。稍后,字典元素可能会减少,从而不再需要以前的元素。虽然有很多关于向 plist 添加元素的讨论,但似乎没有一个能解决我的问题。以下是初始 plist 描述:

Key                  Type         Value
Root Dictionary (2 items)
Hourly Data Array (1 item)
Item 0 Array (1 item) <--how do I add more of these
Item 0 Dictionary (3 items) <--how do I add more of these
Name String Joe
Rank String private
serialNo String 123456
NonHourly Data Array (1 item)
Item 0 Array (1 item)
Item 0 Dictionary (3 items)
Name String Jeff
Rank String private
serialNo String 654321

虽然我完全理解如何读取此 plist 文件,但我不明白如何将数组元素添加到每小时和非每小时数据数组,或者如何添加新的字典数组项,然后将它们写回 plist .

因此,以以下代码为起点,我如何完成此代码以添加上述数组元素和字典元素:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);   // Create a list of paths
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *configPlist = [documentsDirectory stringByAppendingPathComponent:@"config.plist"];

NSFileManager *fileManager = [NSFileManager defaultManager];

NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile: configPlist];

...

[data writeToFile: configPlist atomically:YES];

最佳答案

好的,在尝试错误之后,我弄清楚了如何做到这一点。首先,让我为所存储的数据提供一个定义。该数据适用于所有具有小时工和非小时工身份的军人。 “每小时数据”和“非每小时数据”被视为 1 级数组。 1 级数组的元素称为 2 级数组。 2 级数组可以被认为是军人服役过的国家。2 级数组的元素是字典。每个词典都描述了一个军人。

现在对于答案,基本上我需要从内到外工作并创建一个包含要存储的数据的 2 级字典数组。然后将该 2 级数组添加到 1 级数组中。最后,级别 1 数组作为对象存储在 plist 的每小时数据或非每小时数据键中。解决办法如下:

// Create an array of arrays of content encoded as dictionary objects for hourly data
armyPerson *aPerson;
NSArray *level1Element;
NSMutableArray *level2Array;
NSMutableArray *level1Array = [[[NSMutableArray alloc] initWithObjects:nil] autorelease];
for (int i=0; i<[allHourlyPersons count]; i++) {
level1Element = [allHourlyPersons objectAtIndex:i]; // grab the next level1 array element.

// Each level1 array element will have zero or more level2Arrays. The info for each level2 dictionary needs to be collected into
// an level2Array element as individual dictionary objects
level2Array = [[[NSMutableArray alloc] initWithObjects:nil] autorelease]; // initialize the level2Array
for (int j=0; j<[level1Element count]; j++) {
aPerson = [level1Element objectAtIndex:j]; // grab the next armyPerson

// For each episode, create a dictionary object
NSDictionary *level2Element = [NSDictionary dictionaryWithObjectsAndKeys:aPerson.name, @"Name",
aPerson.rank, @"Rank",
aPerson.serialNo, @"serialNo", nil];
[level2Array addObject:level2Element]; // save the info for this episode
}

// Now that we have all the episodes for this level1Element collected into an array of dictionary objects,
// we need to add this array to the level1 array
[level1Array addObject:level2Array];
}

// Finally, we need to create the key-value pair for the hourly source array
[data setObject:level1Array forKey:@"Hourly Data"];

...
Do the same for the Non-Hourly Data prior to:

[data writeToFile: configPlist atomically:Yes];

关于objective-c - 对于包含字典数组的 plist,如何添加和写出新的字典元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6459995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com