Cocoa NSUserDefaults不会写入磁盘

Cocoa NSUserDefaults不会写入磁盘,cocoa,nsuserdefaults,Cocoa,Nsuserdefaults,在我的用户默认设置中,我有一个字典数组,每个字典表示一个对象。我正在尝试实现一种方法来更改对象的名称,该对象的键为“name”。我在NSObject的KVO兼容子类中执行此操作,因为名称是NSTableView中的一个文本字段 我能够找到正确的字典,更改该对象中键的值,并在数组中替换该对象-NSLog确认此过程的每个步骤。此外,更改将反映在tableview中。然而,当同步默认值时,它只是不写。什么明显的错误让我耽搁了将近一天 - (void)setName:(NSString *)aName

在我的用户默认设置中,我有一个字典数组,每个字典表示一个对象。我正在尝试实现一种方法来更改对象的名称,该对象的键为“name”。我在NSObject的KVO兼容子类中执行此操作,因为名称是NSTableView中的一个文本字段

我能够找到正确的字典,更改该对象中键的值,并在数组中替换该对象-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;
}

}

尽管我没有收到任何指示错误的信息,但我正在尝试变异一个不可变的元素。通过将不可变对象复制到可变对象并将其写入用户默认值来修复此问题