2017-01-11 18 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