Plist NSMutableArray & NSMutableDictionary Issue - PullRequest
0 голосов
/ 11 февраля 2011

У меня проблемы с попыткой составить список в моем приложении.Я создал пользовательский, и он копируется в папку документов, так что значения могут быть добавлены.Я до сих пор настроил все, и все в нем выглядит нормально, но когда я редактирую значение и сохраняю его, все значения, кажется, изменяются на то, что когда-либо было тем, которое я только что сохранил.Я немного схожу с ума по этой проблеме, так как она кажется, что я ее исправляю, но она продолжает терпеть неудачу.Также мой plist формат - Root - элемент массива 0 - настройка словаря - строковое значение - строковый элемент 1 - настройка словаря - строковое значение - строковый элемент 1 - настройка словаря - строковое значение - строка OtherValue - строка

Переменные для корневого файла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;

в представлении подробного видаwillppear метод

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];
}

1 Ответ

1 голос
/ 11 февраля 2011

Проблема в том, что в вашем методе сохранения вы устанавливаете значение "Значение" для всего массива словарей, а не для отдельного словаря.

Если вы сохраняете индекс конкретного словаря, вы можете сделать что-то вроде:

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