2013-10-07 4 views
2

NSUserfedault가 번들 식별자에 연결되어 있는지 알고 싶습니다. 나는 버전 1.0 번들 식별자가 com.something되었고,이 응용 프로그램은 이제 NSUSerdefault standardDefaults번들 식별자 및 환경 설정?

에서 일부 설정을 저장 한 예를 를 들어

언젠가 나중에 업데이트가 온다 우리가 어떤 이유로 번들 식별자를 변경해야하는 경우, 새 버전은 이전 버전에 저장된 설정/기본 설정에 액세스 할 수 있습니까?

이 앱은 앱 스토어를 발표하지만 패키지 설치

답변

0

번들 식별자를 변경하면 사용자 기본값 집합이 달라집니다. 응용 프로그램이 샌드 박싱되지 않은 경우 이전 기본값을 읽을 수 있습니다.

// Read the old defaults from com.company.aaa 
NSUserDefaults *oldDefaults = [NSUserDefaults new]; 
NSDictionary *oldDefaultsDict = [oldDefaults persistentDomainForName:@"com.company.aaa"]; 

// Store the old defaults in the standard user defaults 
[[NSUserDefaults standardUserDefaults] setPersistentDomain:oldDefaultsDict forName:[[NSBundle mainBundle] bundleIdentifier]]]; 

당신은 아마 할 것입니다 : 이전 번들 식별자가 com.company.aaa 경우 응용 프로그램이 시작될 때 예를 들어, 새로운 응용 프로그램 + 번들 식별자로 이전 기본값을 복사하려면 다음 코드를 사용할 수 있습니다 그 이후의 재기록을 피하기 위해 이전 기본값을 한 번 가져 왔음을 나타내는 기본값 플래그를 저장합니다. 예 :

NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults]; 
if (! [currentDefaults boolForKey:@"importedOldDefaultsFromAAA"]) { 
    // Read the old defaults from com.company.aaa 
    NSUserDefaults *oldDefaults = [NSUserDefaults new]; 
    NSDictionary *oldDefaultsDict = [oldDefaults persistentDomainForName:@"com.company.aaa"]; 

    // Store the old defaults in the standard user defaults 
    [currentDefaults setPersistentDomain:oldDefaultsDict forName:[[NSBundle mainBundle] bundleIdentifier]]]; 

    // Set the flag to avoid subsequent import of old defaults 
    [currentDefaults setBool:YES forKey:@"importedOldDefaultsFromAAA"]; 
} 
+0

감사합니다. 매우 유용합니다. – Ahmed

0

을 가지고되지 않습니다 내가 말하고 싶지만 예 ~/Library/Preferences/com.domain.appname.plist에 저장되어있는 사용자 기본 설정 지정 (또는 응용 프로그램은 ~/Library/Containers/com.domain.appname/Data/Library/Preferences/com.domain.appname.plist를 샌드 박스 경우).