ユーザーの既定値には、それぞれがオブジェクトを表す辞書の配列があります。キー「名前」を持つオブジェクトの名前を変更するメソッドを実装しようとしています。名前はNSTableViewのテキストフィールドであるため、NSObjectのKVO準拠のサブクラスでこれを行っています。
適切な辞書を見つけ、そのオブジェクトのキーの値を変更し、配列内のそのオブジェクトを置き換えることができます - NSLog はこのプロセスの各ステップを確認します。さらに、変更はテーブルビューに反映されます。ただし、デフォルトの同期に関しては、書き込みません。ほぼ 1 日もの間、私を悩ませてきた明白な間違いとは!?
- (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;
}
}