我正在使用Realm来开发一个消息应用程序。我需要修改一些查询到的对象,例如,如果对象是媒体消息并且还没有缩略图,则下载并尝试保存它到该对象中。
由于这个操作是在for循环中进行的,因此可能会同时有多个下载正在运行。但是,即使我为每个对象保存分配了新实例的默认Realm,为什么会抛出此异常呢?
我尝试将下载块包装在dispatch_async
中,以为可能是竞争条件或其他相关问题,但是没有成功,仍然抛出异常:
'RLMException', reason: 'Realm accessed from incorrect thread'
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);
}];
}
}