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;
}
}