2011-02-11 107 views
0

我無法嘗試在我的應用中使用plist。我創建了一個自定義的文件夾,並將其複製到文檔文件夾中,以便可以添加值。到目前爲止,我已經設置了一切,一切都顯得很好,當我編輯一個值並保存它時,所有的值似乎都改變爲我剛剛保存的值。我對這個問題有點瘋狂,因爲它像我修復它一樣接縫,但它保持失敗。也是我的plist格式 根 - 陣列 項目0 - 字典 設置 - 字符串 值 - 字符串 項目1 - 字典 設置 - 字符串 值 - 字符串 項目1 - 字典 設置 - 字符串 值 - 字符串 OtherValue - 字符串Plist NSMutableArray&NSMutableDictionary問題

根文件的變量 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]; 

的DetailView變量

NSMutableDictionary *settingsDictionary; 
NSMutableArray *settingValArray; 

在的DetailView viewWillAppear中方法

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

的問題是,在您保存方法,您是「值」設置值對字典的整個陣列,而不是一個單獨的字典。

如果保持特定詞典的索引左右,那麼你可以這樣做:

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

謝謝,這工作。我知道我必須做這樣的事情,但不能確定代碼。 – 2011-02-12 10:57:03