【问题标题】:Creating a clone of a realm object [closed]创建领域对象的克隆[关闭]
【发布时间】:2015-09-20 08:23:57
【问题描述】:

我想知道如何创建之前从商店中检索到的领域对象的副本。在我用递增的 id 存储新对象之后。问题是提到的 RealmObject 是在领域的早期创建的,因此不存在 PrimaryKey 等。

感谢您的建议。 丹尼尔

【问题讨论】:

    标签: realm


    【解决方案1】:

    试试这个:

    Product productCopy = realm.copyFromRealm(product);
    productCopy.setId(product.getId() + 1);
    realm.beginTransaction();
    productCopy = realm.copyToRealm(productCopy);
    realm.commitTransaction();
    

    productCopy - 是一个新对象,附加到具有递增 ID 和字段中相同值的领域。

    【讨论】:

      【解决方案2】:

      您必须创建另一个对象并将新对象添加到领域事务中的领域

        OriginalRealmObject *originalActivity = [OriginalRealmObject objectForPrimaryKey:@"primary key"];
      
       OriginalRealmObject* clonedObject   = [[OriginalRealmObject alloc] initWithValue:originalActivity];
      
      
        [realm beginWriteTransaction];
      
        clonedObject.id            = originalActivity.id+1; //make sure is an int property
      
      
        [OriginalRealmObject createOrUpdateInRealm:realm withValue:clonedObject];
        [realm commitWriteTransaction];
      

      【讨论】:

        【解决方案3】:

        我不确定我是否正确理解了你的问题,如果你想要复制一个 RealmObject 并分配一个不同的主键并存储它,你可以试试这个:

        // Get your original RealmObject
        YourModel obj1 = realm.where(YourModel.class).findFirst()
        // Create a RealmObject instance without proxy, setters won't write to db
        YourModel obj2 = new YourModel();
        obj2.setField1(obj1.getField1());
        obj2.setField2(obj1.getField2());
        obj2.setPrimaryKey(obj1.getPrimaryKey()+1);
        
        realm.beginTransaction();
        // This will write obj2 to Realm. And the returned YourModel instance 
        // will be RealmObject with proxy. Setters will write to Realm automatically.
        obj2 = realm.copyToRealmOrUpdate(obj2);
        realm.commitTransaction();
        

        Doc here 可能会有所帮助。

        【讨论】:

          【解决方案4】:

          您可以做一个解决方法,在 JSON 中编码,然后再解码,这样您就有了真正的深层副本。虽然不是一个理想的解决方案。

          如果有帮助,请查看此快速代码,查看第二步:here

          【讨论】:

            猜你喜欢
            • 2019-03-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-11-14
            • 1970-01-01
            • 2014-07-02
            • 2014-07-12
            • 2010-12-14
            相关资源
            最近更新 更多