0

アプリでplistを操作しようとして問題が発生しています。カスタムを作成し、値を追加できるようにドキュメントフォルダにコピーしています。これまでにすべてを設定しましたが、値を編集して保存すると、すべての値が保存したものに変更されたように見えます。私はこの問題を修正するように継ぎ目がありますが、失敗し続けるので、この問題に少し夢中になります。また、私のplist形式はRoot-配列項目0-辞書設定-文字列値-文字列項目1-辞書設定-文字列値-文字列項目1-辞書設定-文字列値-文字列OtherValue-文字列

ルートファイルの変数NSMutableArray*settingsArray;

アプリはテーブルビューにあり、1つのテキストボックスを含む詳細ビューがあります。

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

詳細ビュービューに表示されるメソッド

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

問題は、saveメソッドで、個々のディクショナリではなく、ディクショナリの配列全体に対して「Value」の値を設定していることです。

特定の辞書のインデックスを保持している場合は、次のようなことができます。

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