这是更新对象的另一种选择,而不是其他答案中讨论的选择。
很多时候,当我想要更新对象时,我只需要更新一两个属性,Realm 的一件烦人的事情是持久化对象的属性更改需要包装在写事务中,所以我通常添加一个包装器我的对象的方法来稍微清理一下界面:
@implementation SomeRealmClass
- (void)update:(void (^)(SomeRealmClass *instance))updateBlock
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
updateBlock(self);
[realm commitWriteTransaction];
});
}
@end
Run Code Online (Sandbox Code Playgroud)
这样,我可以像这样更新对象:
SomeRealmClass *instance = [[SomeRealmClass allObjects] objectAtIndex:0];
[instance update:^(SomeRealmClass *instance) {
instance.foo = @"foo 2";
instance.bar = @"bar 2";
}];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10492 次 |
| 最近记录: |