【发布时间】:2015-09-20 08:23:57
【问题描述】:
我想知道如何创建之前从商店中检索到的领域对象的副本。在我用递增的 id 存储新对象之后。问题是提到的 RealmObject 是在领域的早期创建的,因此不存在 PrimaryKey 等。
感谢您的建议。 丹尼尔
【问题讨论】:
标签: realm
我想知道如何创建之前从商店中检索到的领域对象的副本。在我用递增的 id 存储新对象之后。问题是提到的 RealmObject 是在领域的早期创建的,因此不存在 PrimaryKey 等。
感谢您的建议。 丹尼尔
【问题讨论】:
标签: realm
试试这个:
Product productCopy = realm.copyFromRealm(product);
productCopy.setId(product.getId() + 1);
realm.beginTransaction();
productCopy = realm.copyToRealm(productCopy);
realm.commitTransaction();
productCopy - 是一个新对象,附加到具有递增 ID 和字段中相同值的领域。
【讨论】:
您必须创建另一个对象并将新对象添加到领域事务中的领域
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];
【讨论】:
我不确定我是否正确理解了你的问题,如果你想要复制一个 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 可能会有所帮助。
【讨论】:
您可以做一个解决方法,在 JSON 中编码,然后再解码,这样您就有了真正的深层副本。虽然不是一个理想的解决方案。
如果有帮助,请查看此快速代码,查看第二步:here
【讨论】: