0

我已经使用填充了一个数组。

arrSettings = [[NSMutableArray alloc] initWithContentsOfFile:[self settingsPath]];

该文件是一个以数组为根的 plist,然后是一个字典,其中三个键定义为数字。我也尝试将键设置为字符串。

我使用在视图上显示 plist 文件中的值。

diaper = [[arrSettings objectAtIndex:0] objectForKey:@"Diaper Expenses"];
oil = [[arrSettings objectAtIndex:0] objectForKey:@"Oil Used"];
tree = [[arrSettings objectAtIndex:0] objectForKey:@"Wood Used"]; 

此代码工作正常,字典中的值被分配给变量并显示出来。用户可以进行更改,然后按保存按钮。

我使用此代码提取数组的字典部分,以便更新它。对editDictionary 的分配有效。我已经仔细检查了包括大小写在内的键名,这是正确的。

editDictionary = [[NSMutableDictionary alloc] init];
editDictionary = [arrSettings objectAtIndex:0];
NSNumber *myNumber = [NSNumber numberWithFloat:diaperAmount];
[editDictionary setValue:myNumber forKey:@"Diaper Expenses"];
myNumber = [NSNumber numberWithFloat:oilAmount];    
[editDictionary setValue:myNumber forKey:@"Oil Used"];
myNumber = [NSNumber numberWithFloat:treeAmount];
[editDictionary setValue:myNumber forKey:@"Wood Used"];

在这个例子中,我使用了一个 nsnumber。但我也尝试将 xxxAmount 字段作为 SetValue 的一部分,而不是创建 NSNumber。两种实现都不起作用。

发生了几件奇怪的事情。有时前两个 setvalue 语句有效,但最后一个 setvalue 因 EXC_BAD_ACCESS 失败而失败。其他时候,第一个 setValue 失败并出现相同的错误。我不知道为什么前两个有时会起作用。

我不知道下一步该做什么。我已经尝试了几种实施方式,但都没有奏效。此外,在调试器中如何显示 editDictionary 元素。我可以看到editDictionary,但我不知道如何显示各个元素。

4

1 回答 1

2

您有 2 个要编辑字典的作业,而第二个作业抹去了第一个作业。也许你的意思是这样的editDictionary = [[arrSettings objectAtIndex:0] mutableCopy]

于 2010-05-30T18:12:51.020 回答