Ios 8.2 и выше пакет настроек не отображает выбранный элемент, но Default
У меня возникла проблема с настройками приложения. Я использую набор параметров для выбора среды, но после выбора и возврата к настройкам приложения снова отображается выбранная по умолчанию.
Это наблюдается только из 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>
Я уже вижу некоторую информацию в переполнении стека, что это уже ошибка в Apple, я надеюсь, что если у кого-то есть какие-либо обновления на ней.
Ответы
Ответ 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];
}
Ответ 2
Кажется, что ошибка в iOS 8 и выше, где настройки Radio Button всегда возвращаются к значению по умолчанию в приложении настроек. Другие сталкиваются с одной проблемой: набор настроек iOS PSRadioGroupSpecifier не отображает выбранное значение