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

C#Xamarin.iOS属性访问在不在对象中时返回null,c#,xamarin,xamarin.ios,realm,C#,Xamarin,Xamarin.ios,Realm,我在Xamarin应用程序中面临一个奇怪且令人不安的问题。 下面我的代码在一个项目库中,它与Xamarin.Android和Xamarin.iOS应用程序共享 在Android应用程序上,一切进展顺利,代码产生了准确的预期行为 但出于奇怪的原因,它在iOS应用程序上有所不同。 dbData.Status的值始终为null 奇怪的是,当我在dbData对象上执行“快速监视”时,Status属性的值不是null,并且设置得很好 名称空间MyApp.Services { 公共类MyPersistedO

我在Xamarin应用程序中面临一个奇怪且令人不安的问题。 下面我的代码在一个项目库中,它与Xamarin.Android和Xamarin.iOS应用程序共享

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

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

奇怪的是,当我在
dbData
对象上执行“快速监视”时,
Status
属性的值不是null,并且设置得很好

名称空间MyApp.Services
{
公共类MyPersistedObject:RealmObject
{
公共静态MyPersistedObject GetDbData()
{
var dbData=Ctx.Db.All().FirstOrDefault();
if(dbData==null)
{
dbData=新的MyPersistedObject();
Ctx.Db.Write(()=>Ctx.Db.Add(dbData));
}
返回dbData;
}
公共静态void SetLocationEnabled(bool isEnabled=true)
{
var dbData=GetDbData();
如果(isEnabled&&dbData.Status==“disabled_Status”)
{
Ctx.Db.Write(()=>dbData.Status=“enabled_Status”);
}
如果(!isEnabled&&dbData.Status==“enabled_Status”),则为else
{
Ctx.Db.Write(()=>dbData.Status=“disabled_Status”);
}
Ctx.Db.Write(()=>dbData.Enabled=isEnabled);
}
公共字符串状态{get;set;}
}
}
我做错什么了吗?
有人有想法吗?

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

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

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


在两种平台上使用默认值初始化数据存储时,设置一些断点,您应该能够确定问题产生的原因以及如何纠正问题。

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

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

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

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