새로운 버전의 앱으로 파일을 업데이트하고 변경합니다.
-
05-07-2019 - |
문제
내 앱의 리소스 폴더와 문서 폴더에 복사되는 첫 번째 시작에 기본 설정 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];
}
}
제휴하지 않습니다 StackOverflow