覆盖OnAppearing的Xamarin表单会导致应用崩溃

时间:2018-02-26 06:22:33

标签: xamarin.forms

我正在尝试进行简单的覆盖并在我的页面加载时加载一些数据,我在代码隐藏页面中使用以下代码。

namespace XYZ
{
    public partial class MainPage : ContentPage
    {
        private Label results;
        private Label groupResults;

        public MainPage()
        {
            InitializeComponent();

            results = new Label();

            groupResults = new Label();
        }

        protected override void OnAppearing()
        {
            base.OnAppearing();
            storeIdTxt.Text = Settings.StoreIdSetting;
        }
}
}

如果我取消注释覆盖的东西工作正常,我得到的错误似乎是附加在这里的通用

Error Message

我的设置类非常简单,如下所示

using System;
using System.Collections.Generic;
using System.Text;
using Plugin.Settings;
using Plugin.Settings.Abstractions;

namespace NWMPosNG.Helpers
{
  /// <summary>
  /// This is the Settings static class that can be used in your Core solution or in any
  /// of your client applications. All settings are laid out the same exact way with getters
  /// and setters. 
  /// </summary>
  public static class Settings
{
    private static ISettings AppSettings
    {
        get
        {
            return CrossSettings.Current;
        }
    }

    #region Setting Constants

    private const string SettingsKey = "settings_key";
    private static readonly string SettingsDefault = string.Empty;

    private const string StoreId = null;
    private static readonly string StoreIdDefault = "0";

    #endregion


    public static string GeneralSettings
        {
            get
                {
                    return AppSettings.GetValueOrDefault(SettingsKey, SettingsDefault);
                }

            set
                {
                    AppSettings.AddOrUpdateValue(SettingsKey, value);
                }
        }

    public static string StoreIdSetting
        {
            get
            {
                return AppSettings.GetValueOrDefault(StoreId, StoreIdDefault);
            }

            set
            {
                AppSettings.AddOrUpdateValue(StoreId, value);
            }
        }
}
}

我将问题范围缩小到使用

访问保存的数据时
storeIdTxt.Text = Settings.StoreIdSetting;

但我不明白为什么会导致崩溃。

2 个答案:

答案 0 :(得分:0)

这条线是罪魁祸首

private const string StoreId = null;

我真的不明白为什么,但是将其设置为非NULL值会导致崩溃消失

答案 1 :(得分:0)

您正在使用James Montemagno的Settings Plugin。这几乎是KeyValuePair,它跨会话存储在本地设备上。

在你的情况下:

AppSettings.GetValueOrDefault(StoreId, StoreIdDefault); 

转换为:

AppSettings.GetValueOrDefault(null, "0");

崩溃是因为&#39; null&#39;不能成为一把钥匙。这就是为什么设置密钥(StoreId)可以防止崩溃发生的原因。