0

我在尝试在我的应用程序中使用 plist 时遇到问题。我创建了一个自定义的并将其复制到文档文件夹中,以便可以添加值。到目前为止,我已经设置了所有内容,并且所有内容看起来都很好,但是当我编辑一个值并保存它时,所有值似乎都变成了我刚刚保存的那个值。我对这个问题有点疯狂,因为它看起来像是我修复了它,但它一直在失败。我的 plist 格式也是 Root - Array Item 0 - Dictionary Setting - String Value - String Item 1 - Dictionary Setting - String Value - String Item 1 - Dictionary Setting - String Value - String OtherValue - String

根文件 NSMutableArray *settingsArray; 的变量

应用程序在一个表格视图中,并且有一个带有一个文本框的详细视图。

-(void)viewdidload{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"settings.plist"];
NSMutableArray *tmpArray = [[NSMutableArray alloc] initWithContentsOfFile:path];
self.settingsArray = tmpArray;
[tmpArray release];
}

在 cellForRowAtIndexPath 方法内

// Configure the cell.
cell.textLabel.text = [[self.settingsArray objectAtIndex:indexPath.row] objectForKey:@"Setting"];
return cell;

在 didselectrowatindex 方法中

drinkDetailViewController.settingsDictionary = [self.settingsArray objectAtIndex:indexPath.row];

详细视图变量

NSMutableDictionary *settingsDictionary;
NSMutableArray *settingValArray;

在 detailview 视图中将出现方法

settingNamelabel.text = [settingsDictionary objectForKey:@"Setting"];
valueTextField.text = [settingsDictionary objectForKey:@"Value"];

这是保存方法

- (IBAction) save: (id) sender {    
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"settings.plist"];
NSMutableArray *tmpArray = [[NSMutableArray alloc] initWithContentsOfFile:path];
self.settingValArray = tmpArray;

[settingValArray setValue:valueTextField.text forKey:"Value"];
[settingValArray writeToFile:path atomically:YES];
}
4

1 回答 1

1

问题在于,在您的保存方法中,您是针对整个字典数组设置“Value”的值,而不是针对单个字典。

如果您保留特定字典的索引,那么您可以执行以下操作:

[[settingValArray objectAtIndex:dictionaryIndex] setValue:valueTextField.text forKey:"Value"];
[settingValArray writeToFile:path atomically:YES];
于 2011-02-11T15:20:36.510 回答