2013-10-07 8 views
2

Я хотел бы знать, привязан ли NSUserfedault к идентификатору связки?идентификатор связки и предпочтения?

Например У меня есть версия 1.0 расслоения идентификатор был com.something и это приложение сохранены некоторые настройки в NSUSerdefault standardDefaults

Теперь через некоторое время, если обновление идет, и мы должны изменить идентификатор пакета по какой-то причине, будет ли новая версия иметь доступ к настройкам/предпочтениям, сохраненным предыдущей версией?

приложение не опубликовано APP STORE, но имеет пакет установки

ответ

0

Если вы измените идентификатор связки, у вас будет другой набор пользовательских значений по умолчанию. Вы все равно можете прочитать старые настройки по умолчанию, если ваше приложение не изолировано. Например, если ваш старый идентификатор расслоение com.company.aaa, вы можете использовать следующий код, чтобы скопировать старые значения по умолчанию для нового приложения + идентификатора пакета при запуске приложения:

// 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]]]; 

Вы, вероятно, хотите чтобы сохранить флаг по умолчанию, чтобы указать, что вы импортировали старые значения по умолчанию один раз, чтобы избежать их последующего переписывания. Например:

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).

Смежные вопросы