C# Xamarin.iOS 属性访问在不在对象中时返回 null



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

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

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

奇怪的是,当我对dbData对象执行"快速监视"时,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; }
}
}

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

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

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

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

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

最新更新