2017-05-05 12 views
0

내 응용 프로그램에서 다양한 형식의 파일을 다운로드합니다. 이 형식을 열 수있는 응용 프로그램을 가져 오기 위해 UIDocumentInteractionController를 가져 오려고합니다. 문제는 UIDocumentInteractionController가 작동하지 않는다는 것입니다. 내 코드 :UIDocumentInteractionController가 작동하지 않습니다.

func loadArchiveAtIndex(sender: NSNotification){ 
     let itemIndex = sender.userInfo!["index"] as! Int 
     let archiveKey = sender.userInfo!["downloadKey"] as! String 

     self.downloadingItens.append(itemIndex) 
     print(archiveKey) 

     let qualityOfServiceClass = QOS_CLASS_BACKGROUND 
     let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0) 
     dispatch_async(backgroundQueue, { 

      SQLiteDataController().getTokenSincronismo({ 
       (Valido, Retorno, Token, Tipo) -> Void in 
       if Valido == true{ 
        switch Retorno { 
        case 9: // Retorno Válido 
         print(Token) 

         let params = [ 
          "tokenSincronizacao":"\(Token)", 
          "chaveProdutoBiblioteca":"\(archiveKey)" 
         ] 
         Alamofire.request(.GET, "\(_URLPREFIX)/ObtemProdutoBiblioteca", parameters: params).responseJSON { (response) in 
          if response.result.isFailure { 
           print(response.result.error) 
          } else { 
           let result = response.result.value 
           if let archive = result?["ProdutoBiblioteca"] as? NSDictionary{ 
            let bytes = archive.objectForKey("Arquivo") as! String 
            let name = archive.objectForKey("NomeArquivo") as! String 
            let data = NSData.init(base64EncodedString: bytes, options: .IgnoreUnknownCharacters) 
            let url = NSURL.init(string: name.lowercaseString) 
            data?.writeToURL(url!, atomically: true) 

            let documents = try! NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false) 
            let fileURL = documents.URLByAppendingPathComponent((name.lowercaseString)) 
            print(fileURL) 

            let dic = UIDocumentInteractionController.init(URL: fileURL!) 
            dic.delegate = self 
            dic.presentPreviewAnimated(true) 
// 
            dispatch_async(dispatch_get_main_queue(), {() -> Void in 
             var arrayIndex = 0 
             for item in self.downloadingItens { 
              let i = item 
              if i == itemIndex { 
               self.downloadingItens.removeAtIndex(arrayIndex) 
               NSNotificationCenter.defaultCenter().postNotificationName("reloadTable", object: nil, userInfo: ["itens":self.downloadingItens]) 
               break 
              } 
              arrayIndex = arrayIndex + 1 
             } 
            }) 

           } 
          } 
         } 

         break 
        default: 
         self.showError("Atenção", message: "Não foi Possivel Processar a sua Solicitação") 
         break 
        } 
       }else{ 
        self.showError("Atenção", message: "Não foi Possivel Processar a sua Solicitação") 
       } 
       }, sincFull:true) 
     }) 
    } 

    func documentInteractionControllerViewForPreview(controller: UIDocumentInteractionController) -> UIView? { 
      return self.view 
     } 

내가 뭘 잘못하고 있니?

+0

당신이 좀 더 컨텍스트를 제공하기 위해 전체 클래스를 게시시겠습니까? –

+0

코드를 편집했습니다 – breno

+0

어떤 유형의 클래스가 있습니까? –

답변

1

메인 스레드의보기를 제출해야합니다.

대신 :

let dic = UIDocumentInteractionController.init(URL: fileURL!) 
dic.delegate = self 
dic.presentPreviewAnimated(true) 

시도 :

dispatch_async(dispatch_get_main_queue(), {() -> Void in 
    let dic = UIDocumentInteractionController.init(URL: fileURL!) 
    dic.delegate = self 
    dic.presentPreviewAnimated(true)          
})