使用openurl时,应用设置包未显示在设置应用中
当我的应用程序启动时,会向用户显示模式视图,并包含一个用于调整“设置”应用中的设置的选项。 如果选择此选项,我将使用openURL,如下所示:
if (&UIApplicationOpenSettingsURLString != NULL) { NSURL *appSettings = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; [[UIApplication sharedApplication] openURL:appSettings]; }
这会成功将用户重定向到“我的应用”设置应用中的应用设置。 问题是用户看到的唯一设置是“使用蜂窝数据”单选按钮。 我无法找到root.plist中的设置。 在Settings应用程序的所有后续访问此视图中,root.plist设置都正确加载。
我的理论是,这是一个时间问题,我的应用程序的root.plist由于某种原因尚未加载到“设置”应用程序中。 有谁知道是否是这种情况? 我能以某种方式强行加载吗? 将用户引导到不存在的设置是尴尬和困惑的。
在以下链接:
读取Root.plist的NSUserDafaults值为零
有人说“来自settings.bundle的值实际上并没有加载到NSUserDefaults,直到用户第一次打开设置。默认情况下,它们都是关闭的。一旦用户打开设置包,他们就会为你填写。”
我相信这里提出了一些解决方案:
即使您未打开“设置应用”,也可以在Settings.bundle默认设置中进行设置
比如来自@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; }
- 使用值的NSArray有效地创build占位符模板NSString
- 挑战4
- 检测iPhone是否在黑暗的房间里
- iOS 11 Beta中的scopeButtons忽略了UISearchController.hidesNavigationBarDuringPresentation
- 难以从iPhone X上的2D区域获取面部地标点的深度(SceneKit / ARKit应用程序)
- 缩放整个UICollectionView
- 将NSURLConnection转换为NSURLSessionUploadTask示例
- 禁用Autolay本地化行为(RTL – 右起左行为)
- 为什么我的自定义视图不成为First-Responder,iOS?