2017-09-12 6 views
1

クイックビューでファイル(ex:.docx、.txt、.ppt、.png)を開きたい、自分のサーバーから2つのファイルをダウンロードしたい、最初のファイルが、私はダウンロードに成功があるのか​​はわからない、と私はQuick Lookのフレームワークを使用する方法がわからない、それがquicklookでファイルを開く

タイプ「BdDeatilViewControllerは」QLPreviewControllerDataSource」プロトコル に準拠していないと言います'

しかし、私はQLPreviewControllerDataSourceのプロトコルを追加しましたが、誰もそれで私を助けることができますか? 私のコードです、ありがとう!

class BdDeatilViewController:UIViewController,QLPreviewControllerDataSource 
{ 


    let quickLookController = QLPreviewController() 

    var fileUrlArray:[String] = [] 
    var urlArray : [URL] = [] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     addUrlTofile(fileArray: bulletinBoard.attachments!) 
     stringToUrl(stringArray: fileUrlArray) 

     quickLookController.dataSource = self 
    } 

    @IBAction func openFile(_ sender: Any) { 

     downloadFile(url: urlArray, atIndex: 0) 
     quickLookController.currentPreviewItemIndex = 0 
     navigationController?.pushViewController(quickLookController, animated: true) 

    } 

    //add profix url to file 
    func addUrlTofile(fileArray:Array<String>) { 
     for file in fileArray { 
      var newURL:String = "" 
      newURL = "http://163.18.22.78:81/api/Donwload/" + file 
      fileUrlArray.append(newURL) 
     } 
    } 

    //convert string array to URL array 
    func stringToUrl(stringArray:Array<String>) { 
     for i in stringArray { 
      let url = URL(string: i) 
      urlArray.append(url!) 
     } 
    } 

    //download file from server 
    func downloadFile(url:[URL],atIndex:Int) { 

     let requestURL = url[atIndex] 
     let urlRequest: NSMutableURLRequest = NSMutableURLRequest(url: requestURL) 
     let session = URLSession.shared 
     let task = session.dataTask(with: urlRequest as URLRequest) { 
      (data, response, error) -> Void in 
      if let httpResponse = response as? HTTPURLResponse { 
       let statusCode = httpResponse.statusCode 
       if (statusCode == 200) || ((statusCode == 204)) { 
        print("Everyone is fine, file downloaded successfully.") 
       } 
      } 
     } 
     task.resume() 
    } 

    func numberOfPreviewItemsInPreviewController(controller: QLPreviewController) -> Int { 
     return urlArray.count 
    } 

    func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem { 
     return urlArray[index] as QLPreviewItem 
    } 

} 
+0

あなたが迅速なバージョンを使用していますか? –

+0

私はswift3を使用しました、swift4はすでに利用可能ですか? –

+0

あなたのメソッドシグネチャが無効であることがわかりました このURLからメソッドシグネチャを使用してください。https://developer.apple.com/documentation/quicklook/qlpreviewcontrollerdatasource QLPreviewControllerDataSourceをaltキーを押して、有効なメソッドシグネチャを取得することもできます。 動作するかどうか教えてください。 –

答えて

0

あなたはクイックルックにhttp:// URLですurlArrayの要素を与えています。クイックルックはアイテム自体をダウンロードしないため、ファイルURLを指定する必要があります。 NSURLSessionDataTaskの代わりにNSURLSessionDownloadTaskを使用して、データオブジェクトではなくディスクにファイルをダウンロードし、ダウンロードしたファイルのURLをクイックルックにします。

さらに、Devanshu Sainiが正しいです:間違ったQLPreviewControllerデリゲートメソッドシグネチャを使用しています。

あなたはこれらをしたい:

func numberOfPreviewItems(in: QLPreviewController) 
func previewController(QLPreviewController, previewItemAt: Int)