在我的用户默认值中,我有一个字典数组,每个字典代表一个对象。我正在尝试实现一个方法来更改对象的名称,该对象具有键“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;
}
}
答案 0 :(得分:1)
虽然我没有收到任何指示它的错误,但我试图改变一个不可变的元素。通过将不可变对象复制到可变对象并将其写入用户默认值来修复。