我想知道NSUserfedault是否綁定到包標識符?包標識符和首選項?
例如 我有1.0版捆綁標識符是com.something和這個程序在NSUSerdefault standardDefaults
保存的一些設置現在晚些時候是否有更新來了,我們需要改變捆綁標識符出於某種原因,新版本能夠訪問以前版本存儲的設置/首選項嗎?
應用沒有發佈APP STORE但安裝程序包
我想知道NSUserfedault是否綁定到包標識符?包標識符和首選項?
例如 我有1.0版捆綁標識符是com.something和這個程序在NSUSerdefault standardDefaults
保存的一些設置現在晚些時候是否有更新來了,我們需要改變捆綁標識符出於某種原因,新版本能夠訪問以前版本存儲的設置/首選項嗎?
應用沒有發佈APP STORE但安裝程序包
如果更改包標識符,您將擁有一組不同的用戶默認值。如果您的應用程序不是沙盒,您仍可以閱讀舊的默認值。例如,如果你的舊的包標識符是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"];
}
我會說是給用戶的缺省配置存儲在~/Library/Preferences/com.domain.appname.plist
(或者,如果應用程序是沙箱~/Library/Containers/com.domain.appname/Data/Library/Preferences/com.domain.appname.plist
)。
謝謝,非常有用 – Ahmed