保存对象时从不正确的线程访问的领域
Realm accessed from incorrect thread when saving object
我正在将 Realm 用于消息传递应用程序。我需要修改一些查询对象,例如,如果对象是一条还没有缩略图的媒体消息。然后我下载它并尝试将它保存到对象中。
我可以同时下载多个 运行,因为这是在 for 循环中进行的。如果我为每个对象保存分配默认领域的新实例,为什么会抛出此异常?
我尝试将下载块包装在 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);
}];
}
}
Persisted Realm 对象只能在获取它们的同一线程上读取或写入。假设 [self downloadMedia:success:failure:]
的成功块在与读取 messages
不同的线程上被调用,这意味着您不能在块内使用 message
。为当前线程创建新的 RLMRealm
实例对捕获的变量没有任何影响。
我正在将 Realm 用于消息传递应用程序。我需要修改一些查询对象,例如,如果对象是一条还没有缩略图的媒体消息。然后我下载它并尝试将它保存到对象中。
我可以同时下载多个 运行,因为这是在 for 循环中进行的。如果我为每个对象保存分配默认领域的新实例,为什么会抛出此异常?
我尝试将下载块包装在 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);
}];
}
}
Persisted Realm 对象只能在获取它们的同一线程上读取或写入。假设 [self downloadMedia:success:failure:]
的成功块在与读取 messages
不同的线程上被调用,这意味着您不能在块内使用 message
。为当前线程创建新的 RLMRealm
实例对捕获的变量没有任何影响。