下载完成后,Realm从错误的线程访问Swift 3

时间:2016-12-27 04:00:52

标签: swift realm alamofire

我有一个应用程序,用户可以下载pdf文件。我最近转移到alamofire 4和swift 3.我尝试在下载完成后查看pdf文件,但它抛出Realm accessed from incorrect thread.

这是我的代码:

Alamofire.download(url, method: .get, encoding: JSONEncoding.default, to: destination)
        .downloadProgress(queue: DispatchQueue.global(qos: .utility)) { progress in

            DispatchQueue.main.async {
                magazineObject.progressBarDownload = self.percentProgress
                magazineObject.progressBarTitle = self.percentProgressNext.cleanValue

                }
            }
        }
        .validate { request, response, temporaryURL, destinationURL in
            self.localPath = destinationURL
            magazineObject.pathDatabase = String(describing: self.localPath!)
            magazineObject.progressBarDownload = Double(self.percentProgressFinal)
            magazineObject.progressBarTitle = Float(self.displayFinalLabelPercent).cleanValue
            magazineObject.statusDarkViewAfterRelaunch = 1
            magazineObject.statusDownload = self.statusDatabase

            try! realm.write {
                realm.add(magazineObject)
            }
            return .success
    }

1 个答案:

答案 0 :(得分:1)

尝试在validate

中创建另一个域线程对象
.validate { request, response, temporaryURL, destinationURL in
    self.localPath = destinationURL
    magazineObject.pathDatabase = String(describing: self.localPath!)
    magazineObject.progressBarDownload = Double(self.percentProgressFinal)
    magazineObject.progressBarTitle = Float(self.displayFinalLabelPercent).cleanValue
    magazineObject.statusDarkViewAfterRelaunch = 1
    magazineObject.statusDownload = self.statusDatabase

   // create new object here 
   let realm = try! Realm()

    try! realm.write {
        realm.add(magazineObject)
    }
    return .success
}

您可以在领域文档https://realm.io/docs/swift/latest/#using-a-realm-across-threads

中查看详细信息