设置包中的默认值未在 Xamarin.iOS 中加载

Posted

技术标签:

【中文标题】设置包中的默认值未在 Xamarin.iOS 中加载【英文标题】:Default values from settings bundle are not loaded in Xamarin.iOS 【发布时间】:2016-12-21 09:13:16 【问题描述】:

在我的项目中,我定义了一个 settings.bundle,其中包含一个具有多个设置的 Root.plist,它们都有默认值。 但是,在新设备上首次启动时,这些默认设置会显示在设置应用程序中,但不会加载。

这里出了什么问题?

【问题讨论】:

【参考方案1】:

事实证明,这是故意的。 Settings.bundle 中的 DefaultValue 规范仅用于显示目的。 Found on ijure.org

如果值不存在,您还可以在 Objective C 中找到获取默认值并将它们写入设置字典的解决方案。

我在this answer to a similar question的启发下重写了它:

private static void RegisterDefaultsFromSettingsBundle()

    var defaults = NSUserDefaults.StandardUserDefaults;
    defaults.Synchronize();

    var settingsBundle = NSBundle.MainBundle.PathForResource(@"Settings", @"bundle");

    if (string.IsNullOrEmpty(settingsBundle))
    
        Console.WriteLine("Could not find Settings.bundle!");
        return;
    

    var settings = NSDictionary.FromFile(settingsBundle + @"/Root.plist");
    var preferences = settings[(NSString)"PreferenceSpecifiers"] as NSArray;

    using (var defaultsToRegister = new NSMutableDictionary())
    
        if (preferences != null)
        
            foreach (var prefItem in NSArray.FromArray<NSDictionary>(preferences))
            
                var key = prefItem[(NSString) "Key"] as NSString;

                if (key != null)
                
                    var currentObject = defaults[key];
                    if (currentObject == null)
                    
                        // Not yet set in the defaults
                        var defaultValue = prefItem[@"DefaultValue"];
                        defaultsToRegister.Add(key, defaultValue);
                        Console.WriteLine($"Setting value 'defaultValue' for key 'key'");
                    
                    else
                    
                        // Already set in the defaults: don't touch
                        Console.WriteLine($"Key 'key' is readable (value: 'currentObject'), nothing written to defaults.");
                    
                
            
        

        defaults.RegisterDefaults(defaultsToRegister);
    
    defaults.Synchronize();

希望这对某人有所帮助

【讨论】:

以上是关于设置包中的默认值未在 Xamarin.iOS 中加载的主要内容,如果未能解决你的问题,请参考以下文章

导出默认值未在WebStorm中使用

反应:useContext 值未在嵌套函数中更新

导航栏 Alpha 值未在 iOS 7 中设置

RegSetValueEx返回成功,但是注册表值未在regedit中更新

布尔值未在 Hibernate 中与 MySQL 正确映射

故事板未在 xamarin ios 设计器中打开