2017-01-11 3 views
0

, когда я загружаю файл PDF после того, как я закончил с ним, когда я нажимаю, он должен вернуться к предыдущему контроллеру представления, и я должен снова открыть тот же файл pdf, если захочу. но это не тот случай, когда я пытаюсь открыть тот же PDF я получаю эту ошибкураскадровка segue error после закрытия pdf-файла

fileSystemRepresentationWithPath:]: ноль или пустой путь аргумент»

если я изменить функцию распускать к этому _ = я. navigationController? .popToRootViewController (анимированный: 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 для просмотра метода viewwillappear. Надеюсь, он сработает – Chandan

+0

Я попытался это сделать, но это не сработало – Khallad

+0

Почему у вас был вызов метода уклонения в текущем контроллере вместо ReaderViewController. вы можете уволить напрямую из ReaderViewController, если я не ошибаюсь. – Chandan

ответ

0

Почему вы не используете метод popViewController(animated:)? Он должен вернуться к проверенному контроллеру (Apple doc.).

+0

Когда я его использую, он возвращается, но просмотр коллекции не отображается. – Khallad

+0

Пожалуйста, добавьте этот код к вопросу. – SerjOxo

+0

Я добавил код – Khallad

Смежные вопросы