【问题标题】:iOS Realm Update Object In BlockiOS 领域更新块中的对象
【发布时间】:2015-02-26 15:39:35
【问题描述】:

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

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

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

我想知道当您将 Realm 与 GCD 内容混合时,以下内容是否会起作用/是否会产生任何负面影响:

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

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

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

【问题讨论】:

  • 你会遇到线程问题,因为这种方式不是线程安全的。

标签: ios objective-c grand-central-dispatch realm


【解决方案1】:

来自 realm.io:

不支持跨线程共享 RLMRealm 实例。

所以,你需要使用

RLMRealm *realm = [RLMRealm defaultRealm];

在每个线程中。

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

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

【讨论】:

  • 啊,我在文档中并没有那么远——这是一个更容易/更安全的解决方案。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多