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

, 내가 아닌 가변 요소를 돌연변이하려고했다. 변경할 수없는 객체를 변경 가능한 객체에 복사하고 사용자 기본값에 기록하여 수정했습니다.

관련 문제