문제

내 앱의 리소스 폴더와 문서 폴더에 복사되는 첫 번째 시작에 기본 설정 PLIST 파일이 있습니다.

연속적인 버전의 앱에서 이전 버전 이후 추가 된 새로운 키 및 값 (아마도 중첩)으로 문서의 Plist 설정을 어떻게 병합 할 수 있습니까?

나는 속성이 실제로 앱에서 nsdictionary로 만들어지는 패턴을 보았고 (모든 기본 설정 포함), plist 파일에 저장된 현재 설정은 해당 사전과 병합 된 다음 현재 PLIST를 통해 저장됩니다.

좋은 접근 방식입니까? 그렇다면 서브 어레이 및 하위 사전으로 여러 중첩 값을 가질 수있는 NSDictionary를 병합하는 방법은 무엇입니까?

또한 설정을위한 별도의 사용자 정의 파일이있는 것이 좋습니다. 아니면 항상 nsuserDefaults를 사용해야합니까? NSUSERDEFAULTS가 버전 작성 및 변경 기본값을 처리합니까?

많은 감사,

마이크

도움이 되었습니까?

해결책

좋아, 나는 그것을하는 가장 좋은 방법을 생각해 낸 것 같아요 :

- (void)readSettings {

    // Get Paths
    NSString *defaultSettingsPath = [[NSBundle mainBundle] pathForResource:@"DefaultSettings" ofType:@"plist"];
    NSString *settingsPath = [self.applicationDocumentsPath stringByAppendingPathComponent:@"Settings.plist"];

    // Read in Default settings
    self.settings = [NSMutableDictionary dictionaryWithContentsOfFile:defaultSettingsPath];

    // Read in Current settings and merge
    NSDictionary *currentSettings = [NSDictionary dictionaryWithContentsOfFile:settingsPath];
    for (NSString *key in [currentSettings allKeys]) {
        if ([[self.settings allKeys] indexOfObject:key] != NSNotFound) {
            if (![[currentSettings objectForKey:key] isEqual:[self.settings objectForKey:key]]) {

                // Different so merge
                [self.settings setObject:[currentSettings objectForKey:key] forKey:key];

            }
        }
    }

}

- (void)saveSettings {
    if (self.settings) {
        NSString *settingsPath = [self.applicationDocumentsPath stringByAppendingPathComponent:@"Settings.plist"];
        [self.settings writeToFile:settingsPath atomically:YES];
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top