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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSUserDefaults是否与捆绑标识符绑定?相关的知识,希望对你有一定的参考价值。

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

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

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

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

答案

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

以上是关于NSUserDefaults是否与捆绑标识符绑定?的主要内容,如果未能解决你的问题,请参考以下文章

与配置文件不同的捆绑标识符。

Transportert添加APP时提示:找不到合适的应用程序记录。请验证您的捆绑标识符“xxx”是否正确。

Transportert添加APP时提示:找不到合适的应用程序记录。请验证您的捆绑标识符“xxx”是否正确。

Transportert添加APP时提示:找不到合适的应用程序记录。请验证您的捆绑标识符“xxx”是否正确。

尝试上传应用程序并验证捆绑标识符失败

Xcode 错误:没有具有与捆绑标识符匹配的有效签名身份的配置文件