2016-12-27 1 views
0

У меня есть приложение, и пользователь может загрузить pdf-файл. Я недавно перейти к alamofire 4 и быстро 3. Я стараюсь, чтобы просмотреть PDF-файл после завершения загрузки, но бросить Realm accessed from incorrect thread.Realm доступ из неправильной нити после завершения загрузки Swift 3

вот мой код:

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

Попробуйте создать другой объект области нити внутри 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 
} 

Вы можете проверить детали на Realm документы https://realm.io/docs/swift/latest/#using-a-realm-across-threads

+0

Это работает! Большое спасибо! –