【问题标题】:How do I launch my settings bundle from my application?如何从我的应用程序启动我的设置包?
【发布时间】:2010-09-25 01:23:49
【问题描述】:

我正在为我的应用程序添加一个设置包,作为一种获得我偏好的 GUI 的廉价方式。是否可以从我的应用程序中的按钮启动它,还是我的用户总是必须通过内置的设置应用程序手动访问它?

【问题讨论】:

    标签: ios iphone cocoa-touch


    【解决方案1】:

    他们可能必须转到设置应用程序,具体取决于您的操作方式。

    请参阅this document, 应用程序首选项部分。以下是引言中的相关部分:

    将您的应用程序首选项添加到“设置”应用程序最适合生产力风格的应用程序以及您的首选项值通常配置一次然后很少更改的情况。例如,邮件应用程序使用这些首选项来存储用户的帐户信息和邮件检查设置。因为设置应用程序支持分层显示首选项,所以当您有大量首选项时,从设置应用程序中操作您的首选项也更合适。在您的应用程序中提供相同的首选项集可能需要太多屏幕,并可能导致用户混淆。

    当您的应用程序只有几个选项或用户可能希望定期更改选项时,您应该仔细考虑“设置”应用程序是否适合他们。例如,实用程序应用程序在其主视图的背面提供自定义配置选项。视图上的一个特殊控件将其翻转以显示选项,另一个控件将视图翻转回来。对于简单的应用程序,这种类型的行为提供了对应用程序选项的即时访问,并且比转到设置更方便用户。

    更新

    链接已过期。 This is a similar document 在设置包上。

    【讨论】:

      【解决方案2】:

      对于iOS5,您可以直接打开设置:

      [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];

      【讨论】:

        【解决方案3】:

        回答了我自己的问题:您确实可以使用 NSUserDefaults 来保存您自己的应用程序首选项,而无需与系统设置集成。

        例如,我的应用程序是一个实用程序应用程序,它有一个小的 UI,用于在 FlipSide 上进行一些设置(用户按下“i”按钮时的视图)。

        请注意,我从两个来源找到此信息。

        1. 在来自 iPhone BootCamp 的一系列精彩报告中,Scott Leberknight 顺便提到,他被告知应用程序用户默认设置可能会或可能不会集成到设置应用程序中。

        2. 来自 iphone 官方开发者页面的 BubbleLevel 示例代码使用首选项来存储关卡校准(在背面视图中设置)

        以下是 LevelAppDelegate.m 中的方法,它们在应用程序启动时加载首选项,并在应用程序终止时保存:

        // Invoked after the application has been launched and initialized but before it has received its first event.
        - (void)applicationDidFinishLaunching:(UIApplication *)application {
            // Set up the level view controller
            levelViewController = [[LevelViewController alloc] init];
            [window addSubview:levelViewController.view];
        
            // Restore calibration for device
            float restoredOffset = [[NSUserDefaults standardUserDefaults] floatForKey:BubbleLevelCalibrationOffsetKey];
            levelViewController.calibrationOffset = restoredOffset;
        }
        
        
        // Invoked immediately before the application terminates.
        - (void)applicationWillTerminate:(UIApplication *)application {
            float calibrationOffset = levelViewController.calibrationOffset;
            NSNumber *offset = [NSNumber numberWithFloat:calibrationOffset];
            [[NSUserDefaults standardUserDefaults] setObject:offset forKey:BubbleLevelCalibrationOffsetKey];
        }
        

        不过,我猜对原始问题的正确答案是:

        1. 不 - 你不能从你自己的应用程序启动设置 UI(我还没有看到任何方法来做到这一点 - 我猜可能是错误的 - 但我很确定即使你可以启动您的应用程序中的设置,例如 URL 可用于启动 Safari 的方式 - 您将无法从“设置”应用程序返回到您的应用程序,这会破坏目的)。

        2. 对于首选项级别的持久性(相对于应用程序数据持久化在文档、数据库或缓存中),您有 2 个选择 i) 使用系统设置应用程序进行编辑 ii) 在您的应用中创建您自己的控件

        在任何一种情况下,您都可以使用 NSUserDefaults 来实现实际的持久性。

        【讨论】:

        • 我在一次技术讲座中向一位 iPhone 工程师询问了这个问题,他说你不能那样做。他建议我提交一个错误,以便 Apple 确定这是否是一个受欢迎的请求。
        【解决方案4】:

        我不知道有什么方法可以从您的应用中启动 Settings.app。但是,为什么不将设置直接集成到您的应用程序中呢?您可以使用InAppSettingsKit 轻松做到这一点。

        【讨论】:

          【解决方案5】:

          不,您不能 - 他们必须退出您的应用并启动设置。这是一种痛苦,如上所述,这是您必须做出的设计决定。

          【讨论】:

            【解决方案6】:

            我刚刚看到 Aka-aki 应用程序将我直接带到“设置”应用程序的推送通知屏幕。我第一次启动它时它就这样做了。所以应该是可以的。 :)

            【讨论】:

            • 如果应用程序第一次尝试使用推送时有一个内置的操作系统提示,我不会感到惊讶。
            猜你喜欢
            • 1970-01-01
            • 2011-10-28
            • 1970-01-01
            • 1970-01-01
            • 2012-11-10
            • 1970-01-01
            • 1970-01-01
            • 2014-05-30
            • 2017-09-01
            相关资源
            最近更新 更多