我对Realm很陌生,考虑在特定项目中从CoreData堆栈转而支持它,因为我大多只需要本地存储 - Realm至少在纸面上感觉像是一个完美的匹配.我面临的问题是,我无法找到一种方法来修改从RLMResults检索的子类RLMObject而无需写入事务.我确实理解它的来源,但在我的具体情况下,这是一个问题 - 用户可以自由修改对象,然后保存或放弃更改.如果用户取消编辑并且所有变通办法对我来说都很脏,那么让Realm保持最新状态然后回滚是不对的.有没有一种聪明的方法可以自由地修改对象,只有当用户决定保存他的更改后才能创建createOrUpdate?
您在这里寻找的设计模式可能会"分离"Realm对象,因此您可以将其作为"独立对象"(未绑定到任何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.
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅Realm关于"更新对象"的Objective-C文档:https://realm.io/docs/objc/latest/#updating-objects