Xamairn.iOSでSettingsBundleのDefaultValueが取得できない
ナビゲーションに移動
検索に移動
Xamarin.iOSでSettings Bundleから値を取得しようとすると「DefaultValue」に設定した値ではなく必ずnullが返ってきてしまう。iPadの設定画面上ではちゃんと表示されているのにアプリからだとnullが返ってくる。
これはXamarin.iOSに限った話ではなくObjective-CやSwiftでも同様。
この問題を回避するにはアプリ起動時一発目に以下のようなコードを走らせるとよい。 ググればObjective-CやSwiftでの実装例もでてくる。
public override void ViewDidLoad()
{
base.ViewDidLoad();
SetDefaultsFromSettingsBundle();
}
void SetDefaultsFromSettingsBundle()
{
var settingsUrl = NSBundle.MainBundle.PathForResource("Settings.bundle/Root.plist", null);
var settingsPlist = new NSDictionary(settingsUrl);
if (settingsPlist == null)
return;
var preferences = settingsPlist["PreferenceSpecifiers"] as NSArray;
if (preferences == null)
return;
var ud = NSUserDefaults.StandardUserDefaults;
foreach (var pitem in NSArray.FromArray<NSDictionary>(preferences))
{
// keyがないのはセパレーター等なのですっ飛ばす
var key = pitem["Key"] as NSString;
if (key == null)
continue;
// 初期値を取得する
var val = pitem["DefaultValue"];
if (val == null)
continue;
// 既存のvalueがnullじゃないのは入力済みなのですっ飛ばす
var cur = ud.ValueForKey(key);
if (cur != null)
continue;
// 明示的に保存する。
ud.SetValueForKey(val, key);
}
// いらない気もするが明示的にフラッシュしとく。
ud.Synchronize();
}