realm - 有没有办法修改 RLMObject 而不保留它?

标签 realm

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

最佳答案

您在这里寻找的设计模式可能会“分离”Realm 对象,以便您可以在内存中将其修改为“独立对象”(不绑定(bind)到任何 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 文档中有关“更新对象”的更多信息:https://realm.io/docs/objc/latest/#updating-objects

关于realm - 有没有办法修改 RLMObject 而不保留它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33633092/

相关文章:

java - Realm 未写入,因为已执行写入操作

android - 使用新的 Realm 配置打开 Realm

android - 切换到插件 android gradle 3.3 时构建项目 io.realm.DefaultRealmModule 时出错

android - 使用 React Native Realm 通过多个 List 对象进行查询

ios - 尝试解开 Realm 对象时出错

android - 从 realm.io 中删除项目发生了什么? Realm 异常 "Removing object is not supported."?

Android Realm 查询

ios - 带 : Stripping frameworks fatal error: lipo: -remove's specified would result in an empty fat file 的 Realm 框架错误

swift - 如何在 Realm 中建模 3 个模型之间的关系?

ios - Realm 更新数据 + DispatchQueue