gpt4 book ai didi

ios - 使用 openurl 时,应用程序设置包未显示在设置应用程序中

转载 作者:行者123 更新时间:2023-11-29 02:27:27 25 4
gpt4 key购买 nike

当我的应用程序启动时,会向用户显示一个模态视图,其中包含一个用于在“设置”应用程序中调整设置的选项。如果选择此选项,我将按如下方式使用 openURL:

if (&UIApplicationOpenSettingsURLString != NULL) {
NSURL *appSettings = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:appSettings];
}

这成功地将用户重定向到“设置”应用中我的应用设置。问题是向用户显示的唯一设置是“使用蜂窝数据”单选按钮。我在 root.plist 中的设置无处可寻。在“设置”应用中对该 View 的所有后续访问中,root.plist 设置均正确加载。

我的理论是,这是一个时间问题,我的应用程序的 root.plist 出于某种原因尚未加载到“设置”应用程序中。有谁知道是否是这种情况?我可以强制它以某种方式加载吗?将用户引导至不存在的设置既尴尬又令人困惑。

最佳答案

在以下链接:

NSUserDafaults reading Root.plist got a nil value

有人指出,“在用户第一次打开设置之前,settings.bundle 中的值实际上不会加载到 NSUserDefaults 中。默认情况下,它们是关闭的。一旦用户打开设置包,它们将填充你。”

我相信这里提出了一些解决方案:

Can you make the settings in Settings.bundle default even if you don't open the Settings App

例如来自@Lawrence Johnston 的这个

- (void)registerDefaultsFromSettingsBundle {
[[NSUserDefaults standardUserDefaults] registerDefaults:[self defaultsFromPlistNamed:@"Root"]];
}

- (NSDictionary *)defaultsFromPlistNamed:(NSString *)plistName {
NSString *settingsBundle = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"];
NSAssert(settingsBundle, @"Could not find Settings.bundle while loading defaults.");

NSString *plistFullName = [NSString stringWithFormat:@"%@.plist", plistName];

NSDictionary *settings = [NSDictionary dictionaryWithContentsOfFile:[settingsBundle stringByAppendingPathComponent:plistFullName]];
NSAssert1(settings, @"Could not load plist '%@' while loading defaults.", plistFullName);

NSArray *preferences = [settings objectForKey:@"PreferenceSpecifiers"];
NSAssert1(preferences, @"Could not find preferences entry in plist '%@' while loading defaults.", plistFullName);

NSMutableDictionary *defaults = [NSMutableDictionary dictionary];
for(NSDictionary *prefSpecification in preferences) {
NSString *key = [prefSpecification objectForKey:@"Key"];
id value = [prefSpecification objectForKey:@"DefaultValue"];
if(key && value) {
[defaults setObject:value forKey:key];
}

NSString *type = [prefSpecification objectForKey:@"Type"];
if ([type isEqualToString:@"PSChildPaneSpecifier"]) {
NSString *file = [prefSpecification objectForKey:@"File"];
NSAssert1(file, @"Unable to get child plist name from plist '%@'", plistFullName);
[defaults addEntriesFromDictionary:[self defaultsFromPlistNamed:file]];
}
}

return defaults;
}

关于ios - 使用 openurl 时,应用程序设置包未显示在设置应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27339701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com