我在一个线程中将对象保存在数组中。有时我需要从另一个线程访问它。我怎样才能做到这一点?
// Main thread
DownloadVideoObject *obj = [DownloadVideoObject createWithKey:@"13"];
obj.videoURLStr = @"..";
[[RLMRealm defaultRealm] addObject:obj];
[self.downloadObjects addObject:obj];
// in another thread
for (DownloadVideoObject *obj in self.downloadObjects) {
if ([key isEqualToString:obj.key]) { // crash on this line "Realm accessed from incorrect thread"
// ...
}
}
在CoreData
中我可以通过objectId
在另一个帖子中获取对象。我怎样才能在Realm中做这样的事情?
我知道我可以通过主键访问对象,但在另一个线程中我无法访问它。保存密钥而不是对象只是正确的解决方案吗?
答案 0 :(得分:0)
你说的是对的。由于Realm对象是线程限制的,因此在另一个线程上与同一个Realm对象进行交互的最简单方法是使用主键简单地在新线程上重新获取它。
为了响应您的编辑,是的,将所有Realm对象的主键放在一个新数组中,只需将其传递给新线程以允许您重新获取相同的对象将是最快捷,最简单的方法。执行这种操作。
作为旁注,尽管Core Data可以从另一个线程访问托管对象(而Realm明确禁止它),但不建议这样做,因为这些对象仍然不是线程安全的,这样做可能会导致不稳定