我有一个Realm对象(让它称之为File),带有一个名为url
的String属性。
我创建了一个Alamofire DownloadRequest.DownloadFileDestination
块,其中包含对url
的引用,因此我可以下载该文件。但是,因为此块在后台线程上执行,所以Realm会抛出异常。我不需要实际访问整个Realm,甚至整个File对象 - 只需要属性url
- 因此没有理由尝试在后台线程中从Realm中打开File对象。
将此字符串(或其他类型的属性)复制出Realm对象以传递给其他线程的正确方法是什么?
我目前的解决方案似乎非常不优雅 - 虽然它确实有用。
let url = "\(object.url)"
这个问题与特定的代码块无关 - 它更像是一个概念性问题。
答案 0 :(得分:0)
这是正常的,如果您阅读Realm's docs for threading,它说File
,这意味着你在主线程上获取fetchFile().url
对象,你不能在其他线程上使用它,在你的案子是Alamofire背景线程
你所做的是正确的,将url的值分配给另一个变量,否则,只需调用fetchFiles()
,其中result.Reference[i].resourceId
从Realm返回文件对象(重新获取文件对象 - 但这会更糟性能,仅在领域对象发生很大变化的其他情况下有用)
答案 1 :(得分:0)
简单地分配let url = object.url
将复制该值并且是线程安全的。