2017-01-11 40 views
0

當我完成它時,我加載PDF文件時,我按下完成它應該回到以前的視圖控制器,我應該能夠再次打開同一個pdf文件,如果我想。但這不是這裏的情況,當我嘗試打開相同的PDF我得到這個錯誤關閉pdf格式文件後的故事板segue錯誤

fileSystemRepresentationWithPath:]:零或空路徑參數」

如果我改變駁回功能,這 _ =自我。 navigationController?.popToRootViewController(animated:true)

它仍然有效。誰能幫我解決這個問題。這是我的代碼。

類showA3lamDa3waVC:UIViewController中,UIWebViewDelegate,ReaderViewControllerDelegate {

var pdfbooks = UIWebView() 
var nIndex:NSInteger! 
var post: Post! 
var db : DBHelperA3lam = DBHelperA3lam() 
var book : a3lamDa3waModel? 


@IBAction func backbtn(_ sender: Any) { 

    if let navController = self.navigationController { 
     navController.popViewController(animated: true) 
    } 
} 


override func viewDidLoad() { 
    super.viewDidLoad() 

    var config : SwiftLoader.Config = SwiftLoader.Config() 
    config.size = 150 
    config.spinnerColor = .brown 
    config.foregroundColor = .black 
    config.foregroundAlpha = 0.5 
    config.titleTextColor = .brown 


    SwiftLoader.setConfig(config) 


    if "" != book?.bookPath { 
    // self.activityIND.isHidden = true 
    // self.activityIND.stopAnimating() 

     SwiftLoader.hide() 
     UIApplication.shared.isNetworkActivityIndicatorVisible = false 

     loadReader(filePaht: (book?.bookPath)!) 
    } else { 

     let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] 
     let strName = book?.id 
     let filePath = "\(documentsPath)/"+strName!+".pdf" 
     let fileManager = FileManager.default 
    // self.activityIND.startAnimating() 

     SwiftLoader.show(title: "Loading...", animated: true) 
     UIApplication.shared.isNetworkActivityIndicatorVisible = true 


     if fileManager.fileExists(atPath: filePath) { 
      // self.loadFromUrl(path: filePath) 
      loadReader(filePaht: (book?.bookPath)!) 
      return; 
     } 


     let reference = FIRStorage.storage().reference(forURL: (self.book?.bookURL)!) 
     reference.data(withMaxSize: 50 * 1024 * 1024) { (data, error) -> Void in 
      if (error != nil) { 

       print ("unable to download pdf file from Firebase Storage") 

      //  self.activityIND.isHidden = false 
      //  self.activityIND.startAnimating() 
       SwiftLoader.show(title: "Loading...", animated: true) 
       UIApplication.shared.isNetworkActivityIndicatorVisible = true 


      } else { 

       if ((try! data?.write(to: URL.init(fileURLWithPath: filePath, isDirectory: false))) != nil) { 
        //  self.loadFromUrl(path: filePath) 
        print ("pdf file is downloaded from Firebase Storage") 
        self.db.upDate(id: (self.book?.id)!, bookPath: filePath) 
       // self.activityIND.isHidden = true 
        SwiftLoader.hide() 
        self.loadReader(filePaht: filePath) 
        UIApplication.shared.isNetworkActivityIndicatorVisible = false 




       } 
      } 
     } 

    } 
} 


func loadReader(filePaht : String) { 

    let document = ReaderDocument(filePath: filePaht, password: nil) 
    if document != nil { 
     let readerVC = ReaderViewController(readerDocument: document) 
     readerVC?.delegate = self 
     readerVC?.modalTransitionStyle = UIModalTransitionStyle.crossDissolve 
     readerVC?.modalPresentationStyle = UIModalPresentationStyle.fullScreen 
     self.navigationController?.pushViewController(readerVC!, animated: true) 
    } 

} 

func dismiss(_ viewController: ReaderViewController!) { 

    // _ = self.navigationController?.popToRootViewController(animated: true) 

    if let a3lamDa3waVC = self.navigationController?.viewControllers[1] { 

    _ = navigationController?.popToViewController(a3lamDa3waVC, animated: true) 
      } 
} 


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

}

這裏是集合視圖

類a3lamDa3waVC代碼:UIViewController中,UICollectionViewDelegate,UICollectionViewDataSource {

@IBOutlet weak var collectionView: UICollectionView! 


var posts = [Post]() 
let db : DBHelperA3lam = DBHelperA3lam() 
var arrayBooks = [a3lamDa3waModel]() 
var selectedIndexPath : IndexPath = IndexPath() 
var post: Post! 

override func viewDidLoad() { 

    var config : SwiftLoader.Config = SwiftLoader.Config() 
    config.size = 150 
    config.spinnerColor = .brown 
    config.foregroundColor = .black 
    config.foregroundAlpha = 0.5 
    config.titleTextColor = .brown 


    SwiftLoader.setConfig(config) 


    super.viewDidLoad() 
// activityIndicator.isHidden = false 

    SwiftLoader.show(title: "Loading...", animated: true) 


    self.arrayBooks.removeAll() 
    self.arrayBooks.append(contentsOf: self.db.fetchAll()) 
    self.collectionView.reloadData() 
    DataService.ds.REF_POSTS.observe(.value, with: { (snapshot) in 


     if let snapshot = snapshot.children.allObjects as? [FIRDataSnapshot] { 

      for snap in snapshot { 
       print ("SNAP: \(snap)") 

       if let postDict = snap.value as? Dictionary<String, AnyObject>{ 
        let key = snap.key 
        let post = Post(postKey: key , postData: postDict) 
        self.posts.append(post) 
        self.db.insertBook(id: postDict["id"] as! String, imgName: postDict["id"] as! String, imgPath: "", bookName: postDict["book_name"] as! String, bookPath: "", imageURL: postDict["image_path"] as! String, bookURL: postDict["book_path"] as! String, caption: "") 




       } 
      } 
     } else { 

     } 
     self.arrayBooks.removeAll() 
     self.arrayBooks.append(contentsOf: self.db.fetchAll()) 
     self.collectionView.reloadData() 

    }) 


    collectionView.delegate = self 
    collectionView.dataSource = self 

} 
func getFilePath(name : String) -> String { 

    let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] 
    let filePath = documentsPath+"/"+name 
    return filePath 
} 


@IBAction func backbtn(_ sender: Any) { 
    if let navController = self.navigationController { 
     navController.popViewController(animated: true) 
    } 
} 



func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 


    return arrayBooks.count 
} 
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

    let book = arrayBooks[indexPath.item] 
    SwiftLoader.hide() 

    if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)as? CollectionViewCellA3lamDa3wa { 

     cell.initWithBook(book: book) 

     return cell 

    }else { 
     return CollectionViewCellA3lamDa3wa() 
    } 


} 

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
    self.selectedIndexPath = indexPath 
    self.performSegue(withIdentifier: "showImage", sender: self) 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
{ 

    if segue.identifier == "showImage" 
    { 
     let vc = segue.destination as! showA3lamDa3waVC 
     vc.book = self.arrayBooks[self.selectedIndexPath.row] 

    } 
} 

}

+0

添加viewDidLoad代碼來查看willappear方法。希望它會工作 – Chandan

+0

我試過這樣做,但它沒有工作 – Khallad

+0

爲什麼你在當前控制器而不是ReaderViewController調用dismiss方法。如果我沒有錯,你可以直接從ReaderViewController中解僱。 – Chandan

回答

0

爲什麼你不使用popViewController(animated:)方法?它必須回到先前的視圖控制器(Apple doc.)。

+0

當我使用它時,它會返回但收集視圖不顯示。 – Khallad

+0

請將此代碼添加到問題。 – SerjOxo

+0

我添加了代碼 – Khallad