2013-10-07 54 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)。