在 Xamarin.iOS 中将本地领域转换为同步领域时出现异常
Exception when converting local realm to synced realm in Xamarin.iOS
请放心,我已经看到了相同问题的所有答案。
按照这个 link
我有一个本地领域,我想从那里复制到同步领域。
public void InitiateSyncForPost()
{
realm = Realm.GetInstance(ConfigForSync);
//realm.WriteAsync((Realm obj) =>
//{
// var realmOld = Realm.GetInstance(Config);
// var ding = realmOld.All<Post>().ToList();
// var dang = realmOld.All<Comment>().ToList();
// var ting = realmOld.All<ImageData>().ToList();
// foreach (var t in dang)
// {
// obj.Add(t, false);
// }
// foreach (var t in ding)
// {
// obj.Add(t, false);
// }
//foreach (var t in ting)
// {
// obj.Add(t, false);
// }
//});
realm.Write(() => {
var realmOld = Realm.GetInstance(Config);
var ding = realmOld.All<Post>().ToList();
var dang = realmOld.All<Comment>().ToList();
var ting = realmOld.All<ImageData>().ToList();
realmOld.Dispose();
foreach (var t in ting)
{
realm.Add(t, true);
}
foreach (var t in dang)
{
realm.Add(t, true);
}
foreach (var t in ding)
{
realm.Add(t, true);
}
});
}
如您所见,我尝试了异步写入和写入方法。
两者都给我例外
当我使用 WriteAsync 时
我得到类似条件不满足数组长度 == 1 的异常(不完全记得)
当我使用当前代码时出现此异常
Realms.Exceptions.RealmObjectManagedByAnotherRealmException: 当一个对象已经被另一个领域管理时,无法开始使用该领域管理对象
我在将对象从本地领域复制到同步领域时做错了什么吗?
您需要创建 非托管 RealmObject
子类的副本 ,然后 将其添加到新领域。
您可以手动或通过辅助扩展执行此操作。
通过 NonManagedCopy
来自 RealmJson.Extensions
的扩展(1):
var nonSyncedRealm = Realm.GetInstance(nonSyncedRealmConfig);
var syncedRealm = Realm.GetInstance(syncedRealmConfig);
var nonSyncedAll = nonSyncedRealm.All<ARealmClass>();
syncedRealm.Write(() =>
{
foreach (var realmObject in nonSyncedAll)
{
var syncedObject = realmObject.NonManagedCopy<ARealmClass>();
syncedRealm.Add(syncedObject, true);
}
});
手动复制:
将您的 RealmObject 子类的 each 属性 分配给新实例化的非托管对象。
syncedRealm.Write(() =>
{
foreach (var realmObject in nonSyncedAll)
{
var syncedObject = new ARealmClass
{
Id = realmObject.Id,
Name = realmObject.Name,
~~~~~~
~~~~~~
~~~~~~
~~~~~~
};
syncedRealm.Add(syncedObject, true);
}
});
(1) 免责声明 RealmJson.Extensions
是我编写的扩展,可通过 nuget 包或源获得:
请放心,我已经看到了相同问题的所有答案。
按照这个 link
我有一个本地领域,我想从那里复制到同步领域。
public void InitiateSyncForPost()
{
realm = Realm.GetInstance(ConfigForSync);
//realm.WriteAsync((Realm obj) =>
//{
// var realmOld = Realm.GetInstance(Config);
// var ding = realmOld.All<Post>().ToList();
// var dang = realmOld.All<Comment>().ToList();
// var ting = realmOld.All<ImageData>().ToList();
// foreach (var t in dang)
// {
// obj.Add(t, false);
// }
// foreach (var t in ding)
// {
// obj.Add(t, false);
// }
//foreach (var t in ting)
// {
// obj.Add(t, false);
// }
//});
realm.Write(() => {
var realmOld = Realm.GetInstance(Config);
var ding = realmOld.All<Post>().ToList();
var dang = realmOld.All<Comment>().ToList();
var ting = realmOld.All<ImageData>().ToList();
realmOld.Dispose();
foreach (var t in ting)
{
realm.Add(t, true);
}
foreach (var t in dang)
{
realm.Add(t, true);
}
foreach (var t in ding)
{
realm.Add(t, true);
}
});
}
如您所见,我尝试了异步写入和写入方法。 两者都给我例外
当我使用 WriteAsync 时
我得到类似条件不满足数组长度 == 1 的异常(不完全记得)
当我使用当前代码时出现此异常
Realms.Exceptions.RealmObjectManagedByAnotherRealmException: 当一个对象已经被另一个领域管理时,无法开始使用该领域管理对象
我在将对象从本地领域复制到同步领域时做错了什么吗?
您需要创建 非托管 RealmObject
子类的副本 ,然后 将其添加到新领域。
您可以手动或通过辅助扩展执行此操作。
通过 NonManagedCopy
来自 RealmJson.Extensions
的扩展(1):
var nonSyncedRealm = Realm.GetInstance(nonSyncedRealmConfig);
var syncedRealm = Realm.GetInstance(syncedRealmConfig);
var nonSyncedAll = nonSyncedRealm.All<ARealmClass>();
syncedRealm.Write(() =>
{
foreach (var realmObject in nonSyncedAll)
{
var syncedObject = realmObject.NonManagedCopy<ARealmClass>();
syncedRealm.Add(syncedObject, true);
}
});
手动复制:
将您的 RealmObject 子类的 each 属性 分配给新实例化的非托管对象。
syncedRealm.Write(() =>
{
foreach (var realmObject in nonSyncedAll)
{
var syncedObject = new ARealmClass
{
Id = realmObject.Id,
Name = realmObject.Name,
~~~~~~
~~~~~~
~~~~~~
~~~~~~
};
syncedRealm.Add(syncedObject, true);
}
});
(1) 免责声明 RealmJson.Extensions
是我编写的扩展,可通过 nuget 包或源获得: