如何从Realm Object中复制值以传递给另一个线程

时间:2016-12-09 02:03:58

标签: ios swift multithreading realm

我有一个Realm对象(让它称之为File),带有一个名为url的String属性。 我创建了一个Alamofire DownloadRequest.DownloadFileDestination块,其中包含对url的引用,因此我可以下载该文件。但是,因为此块在后台线程上执行,所以Realm会抛出异常。我不需要实际访问整个Realm,甚至整个File对象 - 只需要属性url - 因此没有理由尝试在后台线程中从Realm中打开File对象。

将此字符串(或其他类型的属性)复制出Realm对象以传递给其他线程的正确方法是什么?

我目前的解决方案似乎非常不优雅 - 虽然它确实有用。

let url = "\(object.url)"

这个问题与特定的代码块无关 - 它更像是一个概念性问题。

2 个答案:

答案 0 :(得分:0)

这是正常的,如果您阅读Realm's docs for threading,它说File,这意味着你在主线程上获取fetchFile().url对象,你不能在其他线程上使用它,在你的案子是Alamofire背景线程

你所做的是正确的,将url的值分配给另一个变量,否则,只需调用fetchFiles(),其中result.Reference[i].resourceId从Realm返回文件对象(重新获取文件对象 - 但这会更糟性能,仅在领域对象发生很大变化的其他情况下有用)

答案 1 :(得分:0)

简单地分配let url = object.url将复制该值并且是线程安全的。