在Xamarin.iOS中将本地域转换为同步域时的例外情况

时间:2017-10-08 08:09:23

标签: linq xamarin realm realm-mobile-platform

请放心,我已经看到了同样问题的所有答案。 点击此链接enter switch-from-local-to-synced-realm

我有一个本地领域,我想从那里复制到同步领域。

    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:当它已经被另一个领域管理时,无法开始管理具有领域的对象

我在将对象从本地域复制到同步域时有什么问题吗?

1 个答案:

答案 0 :(得分:6)

在将添加到新领域之前,您需要创建RealmObject子类非托管副本。

您可以手动或通过辅助扩展程序执行此操作。

来自NonManagedCopy的{​​{1}}分机( 1 ):

RealmJson.Extensions

手动复制:

将RealmObject子类的每个属性分配给新实例化的非托管对象。

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);
    }
});

1 )免责声明syncedRealm.Write(() => { foreach (var realmObject in nonSyncedAll) { var syncedObject = new ARealmClass { Id = realmObject.Id, Name = realmObject.Name, ~~~~~~ ~~~~~~ ~~~~~~ ~~~~~~ }; syncedRealm.Add(syncedObject, true); } }); 是我撰写的扩展程序,可通过nuget包或来源获取:

re:https://sushihangover.github.io/Realm.Json.Extensions/