【问题标题】:C# Xamarin.iOS property access returns null while it is not in objectC# Xamarin.iOS 属性访问返回 null 而它不在对象中
【发布时间】:2019-07-16 11:27:52
【问题描述】:

我在 Xamarin 应用程序中遇到了一个奇怪而令人不安的问题。 我下面的一段代码位于与 Xamarin.Android 和 Xamarin.iOS 应用程序共享的项目库中。

在 Android 应用上,一切顺利,代码产生了准确的预期行为。

但由于奇怪的原因,它在 iOS 应用上有所不同。 dbData.Status 的值始终为 null

奇怪的是,当我对 dbData 对象执行“QuickWatch”时,Status 属性的值不为空且设置正确。

namespace MyApp.Services
{

    public class MyPersistedObject : RealmObject
    {
        public static MyPersistedObject GetDbData()
        {
            var dbData = Ctx.Db.All<MyPersistedObject>().FirstOrDefault();
            if (dbData == null)
            {
                dbData = new MyPersistedObject();
                Ctx.Db.Write(() => Ctx.Db.Add(dbData));
            }

            return dbData;
        }

        public static void SetLocationEnabled(bool isEnabled = true)
        {
            var dbData = GetDbData();

            if (isEnabled && dbData.Status == "disabled_status")
            {
                Ctx.Db.Write(() => dbData.Status = "enabled_status");
            }
            else if (!isEnabled && dbData.Status == "enabled_status")
            {
                Ctx.Db.Write(() => dbData.Status = "disabled_status");
            }

            Ctx.Db.Write(() => dbData.Enabled = isEnabled);
        }

        public string Status { get; set; }
    }
}

我做错了吗? 有人有想法吗?

【问题讨论】:

    标签: c# xamarin xamarin.ios realm


    【解决方案1】:

    如果无法访问整个解决方案并在 Debug 中运行它,很难确切地说出问题出在哪里(例如 Ctx.Db 对象是什么类?),但我的猜测是您的数据中存在初始化问题适用于 iOS 的商店(Ctx.Db 对象)。

    您看到的最有可能的情况是,当您调用 GetDbData() 时,它会返回一个实例化对象,但 iOS 上的 Status 属性为 null(这是字符串的默认值)。那么 SetLocationEnabled() 中的 if 语句都不是 true,因为 status 属性没有设置,并且保持为 null。

    有两种可能导致这种情况,或者一个新的 MyPersistedObject() 没有为 iOS 正确实例化,这只有在两个平台不同并且被注入时才会真正发生,这似乎不太可能,因为它可能只是通用代码;或者您在 iOS 数据存储中初始化条目的方式存在问题。

    当您在两个平台上使用默认值初始化数据存储时设置一些断点,您应该能够确定导致问题的位置以及如何纠正它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      相关资源
      最近更新 更多