2017-11-01 19 views
1

私のiOSプロジェクトのファイル(.txt、.pdf、.docx、.xlsxなど)プレビューでQLPreviewControllerを使用しようとしましたが、うまく機能しませんiOS 11:デバイスやシミュレータを使用している場合でも、空白のページが表示されます。 iOS 10.3.1(シミュレータ)ではうまく動作していて、すべて正常です。iOS/Swift:QLPreviewControllerはiOS11で空白のページを表示します

以下の詳細情報です:

環境:

Xcode version: 8.3.3, 9.0.1 
Device: iPhone 7 Plus, Simulator 
iOS version: 11.0.3(iPhone 7 Plus), 10.3.1(Simulator), 11.0.1(Simulator) 
Swift version: 3.1/3.2 

コード

import UIKit 
import QuickLook 

class QuickViewController: UIViewController { 

    var url: String! 
    var filePath: URL! 
    var msg: Message! { 
     didSet { 
      url = msg.content 
      // create document folder url 
      let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! 
      // let tempDirectory = URL(fileURLWithPath: NSTemporaryDirectory()) 
      filePath = documentsURL.appendingPathComponent((msg.content as NSString).lastPathComponent) 
     } 
    } 

    @IBOutlet weak var contentView: UIView! 


    // MARK: - Initialisation 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 
     loafFile() 
    } 


    func loafFile() { 
     if FileManager.default.fileExists(atPath: filePath.path) { 
      quickLookFile() 
     } else { 
      AppManager_Inst.download(url: "\(url!)", destinationUrl: filePath, completion: { [unowned self](succeed, msg) in 
       if succeed { 
        self.quickLookFile() 
       } else { 
        print(msg) 
       } 
      }) 
     } 
    } 

    func quickLookFile() { 

     print(filePath.path) 

     /// Trying to read the file via FileManager to check if the filePath is correct or not 
     let data = FileManager.default.contents(atPath: filePath.path) 
     print(data) 

     if QLPreviewController.canPreview(filePath as NSURL) { 
      let QLController = QLPreviewController() 
      QLController.delegate = self 
      QLController.dataSource = self 
      QLController.view.frame = self.contentView.frame 
      self.view.addSubview(QLController.view) 
     } else { 
      print("file cannot to preview") 
     } 
    } 

} 


extension QuickViewController: QLPreviewControllerDataSource, QLPreviewControllerDelegate { 

    // QLPreviewControllerDataSource 

    func numberOfPreviewItems(in controller: QLPreviewController) -> Int { 
     return 1 
    } 

    func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem { 
     return filePath as NSURL 
    } 

    // QLPreviewControllerDelegate 
    func previewController(_ controller: QLPreviewController, shouldOpen url: URL, for item: QLPreviewItem) -> Bool { 
     return true 
    } 

} 

私は私がここで見つからないか、何か間違ったことかわからないんだけど、してください助けて。

p .:私はiPhone 5c(iOS 10.3.1)でコードを試してみることにしました。

答えて

3

あなたは

はちょうど私が、これはあなたの問題を解決すべきだと思うself.view

にそれを追加した後QLController.didMove(toParentViewController: self)を追加QLPreviewController()の親クラスとして現在のViewControllerを追加しませんでした。

+0

こんにちは、私はあなたの提案として試してみました、それは仕事ではありません。しかし、私は 'addChildViewController(QLController)'を追加した後、それは動作します。だから私はあなたが私に正しい方向を与えるので、あなたの答えを受け入れるものとしてマークします、ありがとう。 – Raniys

関連する問題