gpt4 book ai didi

ios - 保存对象时从不正确的线程访问的 Realm

转载 作者:搜寻专家 更新时间:2023-10-30 20:15:58 29 4
gpt4 key购买 nike

我正在将 Realm 用于消息传递应用程序。我需要修改一些查询对象,例如,如果对象是一条还没有缩略图的媒体消息。然后我下载它并尝试将它保存到对象中。

我可以同时运行多个下载,因为这是在 for 循环内进行的。如果我为每个对象保存分配默认 Realm 的新实例,为什么会抛出此异常?

我尝试将下载 block 包装在 dispatch_async 中,认为它可能是竞争条件或相关的东西但没有运气,仍然抛出异常。

'RLMException',原因:'从不正确的线程访问的 Realm '

RLMResults *messages = [[Message objectsWhere:@"jabberID = %@", self.recipientJID] sortedResultsUsingProperty:@"date" ascending:YES];

for (Message *message in messages) {
if (!message.hasThumbData) {

[self downloadMedia:message.remoteMediaURL success:^(NSData *mediaData) {

RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
message.hasThumbData = YES;
message.thumbData = mediaData;
[realm commitWriteTransaction];

} failure:^(NSError *error) {
NSLog(@"Error downloading media: %@", error.description);
}];

}
}

最佳答案

Persisted Realm 对象只能在获取它们的同一线程上读取或写入。假设 [self downloadMedia:success:failure:] 的成功 block 在与 messages 不同的线程上被调用,这意味着你不能使用消息 block 内。为当前线程创建一个新的 RLMRealm 实例对捕获的变量没有任何影响。

关于ios - 保存对象时从不正确的线程访问的 Realm ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30270186/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com