iOS 块中的领域更新对象

iOS Realm Update Object In Block

我正在努力将 Realm 集成到一个 iOS 应用程序中,并开始编写一个 class 来处理我所有的 Realm 内容,并且正在编写一个方便的方法来动态更新任何 RLMObject .

在他们的文档中,更新对象非常简单:

- (void)someMethod {
    [self.realm beginWriteTransaction];
    someObject.name = @"New name";
    someObject.somethingElse = @"New something";
    [self.realm commitWriteTransaction];
}

我想知道当您将 Realm 与 GCD 内容混合使用时,以下内容是否会 work/have 任何负面后果:

- (void)updateObjectAndCommitWithUpdateBlock:(dispatch_block_t)updateBlock {
    [self.realm beginWriteTransaction];
    updateBlock();
    [self.realm commitWriteTransaction];
}

然后在另一个 class 中执行以下操作:

- (void)someMethod {
    [[RealmManager sharedInstance] updateObjectAndCommitWithUpdateBlock:^{
        someObject.name = @"New name";
        someObject.somethingElse = @"New something";
    }];
}

来自realm.io:

Sharing RLMRealm instances across threads is not supported.

因此,您需要使用

RLMRealm *realm = [RLMRealm defaultRealm];

在每个线程中。

如果您更喜欢方块,请使用标准方块:

[realm transactionWithBlock:^{
    //your code
}];