NSUserDefaults是否与捆绑标识符绑定?

问题描述 投票:3回答:2

我想知道NSUserDefaults是否与捆绑标识符绑定?

例如,我有版本1.0包标识符是com.something和这个应用程序保存在NSUserDefaults.standardDefaults的一些设置

现在稍后如果有更新,我们因某种原因需要更改包标识符,新版本是否能够访问先前版本存储的设置/首选项?

应用程序未发布APP STORE BUT有包安装程序

macos cocoa
2个回答
1
投票

如果更改捆绑包标识符,则会有一组不同的用户默认值。如果您的应用程序没有沙盒,您仍然可以读取旧的默认值。例如,如果旧的包标识符是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
投票

我会说是的,因为用户默认值存储在~/Library/Preferences/com.domain.appname.plist中(或者如果应用程序是沙箱~/Library/Containers/com.domain.appname/Data/Library/Preferences/com.domain.appname.plist)。

© www.soinside.com 2019 - 2024. All rights reserved.