首页 > 解决方案 > *已解决* 在分发模式下无法从 NSUserDefault 获取值

问题描述

最近,我在 NSUserDefaults 和 App 扩展方面遇到了一个非常奇怪的问题。我正在使用 NSUserDefaults 来存储一些值(例如:valueA)。通过 safari 打开我的应用程序时,我需要获取 valueA。当我将我的应用程序直接部署到设备时效果很好,当我通过 safari 打开我的应用程序时,我可以获得 valueA。但是当我存档我的应​​用程序并基于它导出到 iPA 文件或将我的应用程序推送到 TestFlight 时,当我通过 safari 打开我的应用程序时,我无法再获得 valueA 了。

我猜应用扩展的应用组在分发时改变了,但我不知道分发时的应用组是什么?所以我不确定。

在我更新我的应用程序的配置后,我最近才面临这个问题。有没有人遇到过这个问题?任何想法都会赢得我的尊重。

下面是我使用 NSUserDefaults 获取和设置值的代码

#define GROUPID @"group.****"
...
bool NVDataManagerNative::putString(const std::string& key, const std::string& value)
{
    NSUserDefaults *ud = [[NSUserDefaults alloc] initWithSuiteName:GROUPID];
    if(ud == nil){
        ud = [NSUserDefaults standardUserDefaults];
    }
    [ud setObject:convertNSString(value) forKey:convertNSString(key)];
    [ud synchronize];
    return true;
}
...
std::string NVDataManagerNative::getString(const std::string& key, const std::string& def)
{
    NSUserDefaults *ud = [[NSUserDefaults alloc] initWithSuiteName:GROUPID];
    if(ud == nil){
        ud = [NSUserDefaults standardUserDefaults];
    }

    NSString *ret = [ud stringForKey:convertNSString(key)];
    if (nil == ret) {
        return def;
    }

    return [ret UTF8String];
}

标签: iosnsuserdefaultsobjective-c++ios-app-extensionsoftware-distribution

解决方案


推荐阅读