2012-09-10 509 views
0

在我的用戶默認值中,我有一個字典數組,每個數組代表一個對象。我正在嘗試實現一種方法來更改具有「名稱」鍵的對象的名稱。我在NSObject的KVO兼容子類中這樣做,因爲名稱是NSTableView中的文本字段。NSUserDefaults不會寫入磁盤

我能夠找到正確的詞典,更改該對象中鍵的值,並替換數組中的該對象 - NSLog確認此過程的每一步。此外,該更改反映在tableview中。但是,當涉及到同步默認值時,它不會寫入。什麼明顯的錯誤一直困擾我幾乎一天!?

- (void)setName:(NSString *)aName { 

if (name && aName != name) { 

    NSMutableArray *existingArray = [[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"array"]]; 

    [existingArray enumerateObjectsUsingBlock:^(id object, NSUInteger idx, BOOL *stop) { 
     if ([[object valueForKey:@"name"] isEqualToString:name]) { 

      NSMutableDictionary *data = [existingArray objectAtIndex:idx]; 
      [data setObject:aName forKey:@"name"]; 
      [existingCrates replaceObjectAtIndex:idx withObject:data]; 
      [[NSUserDefaults standardUserDefaults] setObject:existingCrates forKey:@"crates"]; 

      NSLog(@"this is the new existingArray: %@", existingArray); 
      NSLog(@"this is the new plist: %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"array"]); 
      [[NSUserDefaults standardUserDefaults] synchronize]; 

      name = aName; 
      return; 
     } 
    }]; 
} 

else { 
    name = aName; 
} 

}

回答

1

雖然我沒有得到任何錯誤,表明它,我試圖變異非可變元素。通過將不可變對象複製爲可變對象並將其寫入用戶默認值來修復。