iOS 8.2及以上版本的设置包未显示所选项目,仅显示默认项。

15

我在应用设置方面遇到了问题,我正在使用设置包来选择环境,但一旦选择并返回到应用程序设置,它再次显示默认选项。

这只在iOS 8.2及以上版本的设备和模拟器上观察到。 我的设置包plist如下所示。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>PreferenceSpecifiers</key>
    <array>
        <dict>
            <key>DefaultValue</key>
            <string>1</string>
            <key>Key</key>
            <string>Environment</string>
            <key>Title</key>
            <string>Environment</string>
            <key>Titles</key>
            <array>
                <string>Live</string>
                <string>Stage</string>
            </array>
            <key>Type</key>
            <string>PSRadioGroupSpecifier</string>
            <key>Values</key>
            <array>
                <string>0</string>
                <string>1</string>
            </array>
        </dict>
    </array>
    <key>StringsTable</key>
    <string>Root</string>
</dict>
</plist>

我已经在 Stack Overflow 上看到了一些信息,称这是苹果的一个现有bug,希望有人能提供相关更新。


也许这些可以帮到你:
  1. https://dev59.com/sYjca4cB1Zd3GeqP3utR
  2. http://stackoverflow.com/questions/29155410/ios-8-2-nsuserdefaults-standarduserdefaults-returning-nil?rq=1
  3. https://dev59.com/NWzXa4cB1Zd3GeqPVZpN?rq=1
  4. http://www.codedisqus.com/0SNjqXVqee/ios-settingsbundle-localization-difficulties.html
- Ankit Kumar
2
我也遇到了同样的问题,但只有在使用PSRadioGroupSpecifier时才会出现,这是苹果在此处称之为单选按钮组元素:https://developer.apple.com/library/ios/documentation/PreferenceSettings/Conceptual/SettingsApplicationSchemaReference/Articles/RadioGroupElement.html由于XCode的plist编辑器无法识别此类型,我认为苹果并没有完全实现这一点。因此,我改用了多值元素(PSMultiValueSpecifier),它基本上与单选按钮组元素相同,只是值在单独的屏幕中显示。 - hotdogsoup.nl
2个回答

1
如果在启动时设置了外观设置,则必须重新加载应用程序的视图控制器才能显示更改,因此您可以在 appDelegate 中添加类似以下内容的代码:

NSString *type 作为您的 ivars

然后

type = [[NSUserDefaults standardUserDefault] objectForKey:@"Your key"];

在你的didFinishLaunchingWithOptions:方法中

最后,在你的didEnterForeground方法中,添加以下内容

if(![[[NSUserDefaults standardUserDefault] objectForKey:@"Your key"] isEqualToString:type]){
  //Reload your main view controller
  [self.window.rootViewController viewDidLoad]; 
  [self.window.rootViewController viewWillAppear:YES];
} 

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接