C# (包装器管理为本机)Realms.NativeTable.get_字符串处的领域查询出错

C# (包装器管理为本机)Realms.NativeTable.get_字符串处的领域查询出错,c#,database,xamarin,realm,C#,Database,Xamarin,Realm,我正在尝试对我的第一个领域数据库执行一个简单的查询。尝试访问查询方法返回的对象的属性时出错。 我有两个问题: 1.这个错误是什么意思?我很难理解它… 2.我的查询方式正确吗?如果没有,我做错了什么 错误日志: [mono-rt] Stacktrace: [mono-rt] at <unknown> <0xffffffff> [mono-rt] at (wrapper managed-to-native) Realms.NativeTable.get_strin

我正在尝试对我的第一个领域数据库执行一个简单的查询。尝试访问查询方法返回的对象的属性时出错。 我有两个问题:
1.这个错误是什么意思?我很难理解它…
2.我的查询方式正确吗?如果没有,我做错了什么

错误日志:

[mono-rt] Stacktrace:

[mono-rt]   at <unknown> <0xffffffff>

[mono-rt]   at (wrapper managed-to-native) Realms.NativeTable.get_string >(Realms.TableHandle,intptr,intptr,intptr,intptr,bool&) <0x00057>

[mono-rt]   at Realms.RealmObject.GetStringValue (string) <IL 0x0009d, >0x00323>

[mono-rt]   at EasyVending.RCreditCard.get_holderName () <IL 0x0000e, 0x0006f>

[mono-rt]   at EasyVending.RealmManager.getCreditCard () [0x0001c] in /Users/Bernardo/Projects/EasyVending/EasyVending/DataBase/RealmManager.cs:75

[mono-rt]   at EasyVending.Android.CreditCartManagement.OnCreate (Android.OS.Bundle) [0x00111] in /Users/Bernardo/Projects/EasyVending/EasyVending.Android/Activities/CreditCartManagement.cs:89

[mono-rt]   at Android.Support.V4.App.FragmentActivity.n_OnCreate_Landroid_os_Bundle_ (intptr,intptr,intptr) <IL 0x00013, 0x000ff>

[mono-rt]   at (wrapper dynamic-method) object.13add723-97a5-4397-9c8a-e6fc23d98c3c (intptr,intptr,intptr) <IL 0x00017, 0x00043>

[mono-rt]   at (wrapper native-to-managed) object.13add723-97a5-4397-9c8a-e6fc23d98c3c (intptr,intptr,intptr) <IL 0x0001f, 0x00097>

[mono-rt] Attempting native Android stacktrace:

[mono-rt]  at ???+1 [0xbe903ac0]

[mono-rt]  at ???+1 [0x98f50ffc]

=================================================================

Got a SIGSEGV while executing native code. This usually indicates
[mono-rt] a fatal error in the mono runtime or one of the native libraries 
[mono-rt] used by your application.
[mono-rt]

[libc] Fatal signal 11 (SIGSEGV), code 1, fault addr 0x97b77168 in tid 9849 (vending_android)

var rCreditCard=realm.All().First();

如果问题不够清楚,请告诉我。

问题是,在尝试读取
getCreditCard()
rcredcard
上的属性之前,请先关闭域。领域对象中的属性是零拷贝的,它们直接访问数据库,因此一旦关闭领域,对象就变得无效。我们应该更好地处理这种情况,目前还不清楚。谢谢你给我们指出

通常,您可能不希望像以前那样频繁地打开和关闭领域,除非这些调用发生在不同的线程上。如果您坚持这样做,您应该使用作用域将
Realm.Close()
调用移到事务
之外。现在的情况是,如果在事务期间抛出某个对象,它将回滚,但您的领域不会像您预期的那样关闭

最后,通常不需要有一个反映
RealmObject
类的“普通”类。当然,在你的情况下,可能有一些原因,但在这里并不明显。通常,您会直接使用RealmObject类

澄清一下,如果你必须经常打开和关闭领域,你可以用

using (var realm = getRealm()) {
// your update and read logic
}

成功了!谢谢我不知道通过关闭领域,对象会变得无效。。谢谢你的解释!我使用一个普通类来镜像我的领域对象,这确实是有原因的,但它们有一些区别。最后,还有一个问题:如果我想在方法调用中返回rcredcard,我该怎么办?我应该返回它并保留一个打开的领域?是的-保留该领域打开,可能将其作为模型类中的属性。
CreditCardBrand = rCreditCard.bandeira,
var rCreditCard = realm.All<RCreditCard>().First();
using (var realm = getRealm()) {
// your update and read logic
}