iOS Realm 更新 block 中的对象

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

我正在努力将 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";
    }];
}

最佳答案

来自realm.io:

Sharing RLMRealm instances across threads is not supported.

所以,你需要使用

RLMRealm *realm = [RLMRealm defaultRealm];

在每个线程中。

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

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

关于iOS Realm 更新 block 中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28746623/

相关文章:

ios - 向上动画但不填满屏幕的 View

grand-central-dispatch - GCD 队列类型

ios - 在 Swift 3.0 中从异步线程调用 UIAlertController

swift - 如何在刷新 TableView 之前获取 View 模型中的存储库列表?

ios - 如何找出哪个约束不起作用或产生问题

ios - UIAlertController addTextFieldWithConfigurationHandler。奇怪的功能

iOS 7 导航栏在 viewDidAppear 上跳跃/拉伸(stretch)

objective-c - 使用 FMDB 从 SQLite 数据库中删除行

objective-c - iOS - 双击 uibutton

ios - 使用数组将值传递给 SWIFT 中的 TIMER