有没有办法在不持久化的情况下修改RLMObject?

时间:2015-11-10 15:05:45

标签: realm

我对Realm很陌生,正考虑在特定项目中从CoreData堆栈转向支持它,因为我大多只需要本地存储 - Realm至少在纸面上感觉像是一个完美的匹配。我面临的问题是,我找不到一种方法来修改从RLMResults检索到的子类RLMObject,而无需写入事务。我确实理解它的来源,但在我的具体情况下,这是一个问题 - 用户可以自由修改对象,然后保存或放弃更改。如果用户取消编辑并且所有变通办法对我来说都很脏,那么让Realm保持最新然后回滚是不对的。有没有一种聪明的方法可以自由地修改对象,只有当用户决定保存他的更改后才能创建createOrUpdate吗?

1 个答案:

答案 0 :(得分:8)

您在这里寻找的设计模式可能会分离"分离" Realm对象,因此您可以在内存中将其修改为"独立对象" (不依赖于任何领域)。您可以通过从旧对象的值初始化新对象来完成此操作:

@interface Dog : RLMObject
@property NSInteger identifier;
@property NSString *name;
@end
@implementation Dog
+ (NSString *)primaryKey {
    return @"identifier";
}
@end

// Editing screen...

Dog *standaloneDog = [[Dog alloc] initWithValue:persistedDog];
standaloneDog.name = @"Fido"; // <- no write transaction necessary

// On save:

RLMRealm *realm = [RLMRealm defaultRealm];
[realm transactionWithBlock:^{
    // updates the persisted dog with the standalone dog's new values.
    [Dog createOrUpdateInRealm:realm withValue:standaloneDog];
}];

// Nothing to do on cancel since the object was standalone.

请参阅Realm的Objective-C文档&#34;更新对象&#34;有关更多信息:https://realm.io/docs/objc/latest/#updating-objects