2012-09-10 37 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

虽然我没有得到任何错误,表明它,我试图变异非可变元素。通过将不可变对象复制为可变对象并将其写入用户默认值来修复。