ios - Realm - 在后台线程上批量更新 RLMResults

标签 ios objective-c realm ios-multithreading

我有需要迭代的 RLMResults,执行一个可能“长时间运行”的下载任务(时间足够长,不应该在主线程上),并使用此下载的结果更新每个对象。我尝试的最新迭代(在搜索文档寻找答案之后)是这样的,虽然这显然没有按预期工作,但它是演示目的的起点:

RLMResults *objectsToSaveImagesFor = [self allObjectsToSaveImagesFor];
for (Object *object in objectsToSaveImagesFor) {
    RLMThreadSafeReference *objectRef = [RLMThreadSafeReference referenceWithThreadConfined:object];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        RLMRealm *realm = [RLMRealm realmWithConfiguration:self.realm.configuration error:nil];

        Object *threadSafeObject = [realm resolveThreadSafeReference:objectRef];

        BOOL success = [self downloadImageForObject:threadSafeObject];

        [realm transactionWithBlock:^{
            threadSafeObject.imageSaved = success;
        }];
    });
}

我已经尝试了大约十几次迭代,但无法找出规范的 Realm 方法来完成我想做的事情,即下载大量图像(数千个)并更新我的每个 Realm 对象以及后台线程上的下载结果。

最佳答案

无需为 RLMResults 中的每个对象创建并解析线程安全引用,只需执行一次即可:

RLMResults *objectsToSaveImagesFor = [self allObjectsToSaveImagesFor];
RLMThreadSafeReference *objectsRef = [RLMThreadSafeReference referenceWithThreadConfined:objectsToSaveImagesFor];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    RLMRealm *realm = [RLMRealm realmWithConfiguration:self.realm.configuration error:nil];
    RLMResults *objectsToSaveImagesFor2 = [realm resolveThreadSafeReference:objectsRef];
    for (Object *object in objectsToSaveImagesFor2) {
      BOOL success = [self downloadImageForObject:threadSafeObject];
      [realm transactionWithBlock:^{
        object.imageSaved = success;
      }];
    }
});

关于ios - Realm - 在后台线程上批量更新 RLMResults,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42741020/

相关文章:

ios - 更改 UITableViewCell 的高度,无需 heightForRowAtIndexPath

iphone - 面向 Xcode 3 用户的 Xcode 4 提示和技巧

iphone - 服务器无法识别 iPhone 中 HTTP header SOAPAction 的值?

ios - 从 TableView 单元格到另一个 View Controller 的 Segue 转换仅在任意时间有效 - 为什么?

ios - 解析关系 [错误] : can't add a non-pointer to a relation (Code: 111, 版本 : 1. 7.5)

ios - Realm 查询如何工作?

objective-c - 获取 [NSURL 缓存策略] : unrecognized selector sent to instance during downloading an image, AFNetworking

php - Apple 不保证推送的交付?

javascript - 如何用Realm来组织React Native项目文件?

swift - 无法从 RLMObject 转换为 Object 的子类?