Xcode 7.1, Swift 2 UIWebView Ошибка загрузки

У меня есть проект, который имеет ViewController который загружает сохраненный NSURL из памяти. это NSURL сохраняется с помощью NSCoding, Когда я запускаю свое приложение изначально, мой print журнал говорит:

Сохраненный файл URL: файл:///private/var/mobile/Containers/Data/Application/7939335F-C909-479E-A309-5AC833069A7B/Documents/Inbox/Pizza-2.pdf

Веб-просмотр начался Загрузка

Webview завершил загрузку

Он отображает файл PDF просто отлично. Когда я снова запускаю свое приложение через несколько минут, оно не отображает PDF и говорит:

Сохраненный файл URL: файл:///private/var/mobile/Containers/Data/Application/7939335F-C909-479E-A309-5AC833069A7B/Documents/Inbox/Pizza-2.pdf

Запуск веб-просмотра Загрузка веб-просмотра завершается с ошибкой Необязательно (Ошибка Domain=NSURLErrorDomain Code=-1100 "Запрошенный URL-адрес не найден на этом сервере." UserInfo={NSUnderlyingError=0x14883f210 {Ошибка домена =kCFErrorDomainCFNetwork Code=-1100 "Запрошенный URL-адрес не был найден на этом сервере." UserInfo={NSErrorFailingURLStringKey=file:///private/var/mobile/Containers/Data/Application/7939335F-C909-479E-A309-5AC833069A7B/Documents/Inbox/Pizza-2.pdf, NSLocalizedDescription= Запрашиваемый URL-адрес не найден на этом сервере., NSErrorFailingURLKey=file:///private/var/mobile/Containers/Data/Application/7939335F-C909-479E-A309-5AC833069A7B/Documents/Inbox/Pizza-2.pdf}}, NSErrorFailingURLStringKey=file:///private/var/mobile/Containers/Data/Application/7939335F-C909-479E-A309-5AC833069A7B/Documents/Inbox/Pizza-2.pdf, NSErrorFailingURLKey=file:///private/var/mobile/Containers/Data/Application/7939335F-C909-479E-A309-5AC833069A7B/Documents/Inbox/Pizza-2.pdf, NSLocalizedDescription= Запрошенный URL не был найден на этом сервере.})

Мой код для ViewController является:

class PDFItemViewController: UIViewController, UIWebViewDelegate {

// MARK: Properties

var file: PDFFile?

var incomingURL: NSURL!

@IBOutlet weak var background: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    //Set theme pic to back always
    view.sendSubviewToBack(background)

    let myWebView:UIWebView = UIWebView(frame: CGRectMake(0, 44, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height))

    self.view.addSubview(myWebView)

    myWebView.delegate = self

    if let file = file {

        incomingURL = file.url

        print("Saved URL File: \(incomingURL)")

        let request = NSURLRequest(URL: incomingURL!)

        myWebView.loadRequest(request)

    }

}

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


// MARK: UIWebView Delegate

func webView(webView: UIWebView, didFailLoadWithError error: NSError?) {
    print("Webview fail with error \(error)");
}

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    return true
}

func webViewDidStartLoad(webView: UIWebView) {
    print("Webview started Loading")
}

func webViewDidFinishLoad(webView: UIWebView) {
    print("Webview did finish load")
}

}

"PDFFile" представляет собой массив файлов PDF. NSURL сохраняется из входящего PDF-файла, который пользователь может просматривать по почте. Похоже, что это не может быть сохранение? Но почему он показывает имя файла, если не сохраняет? Спасибо.

Обновить:

В моем AppDelegate У меня есть этот код:

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {

    // Transfer incoming file to global variable to be read

    if url != "" {

        // Load from Mail App

        incomingFileTransfer = url

        incomingStatus = "Incoming"

    }       

    return true
}

Я создал class называется PDFFile.swift:

// Class for the saved PDF File, in this case a NSURL
class PDFFile: NSObject, NSCoding {

// MARK: Properties

var name: String

var url: NSURL


// MARK: Archiving Path

static let DocumentsDirectory = NSFileManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first!

static let ArchiveURL = DocumentsDirectory.URLByAppendingPathComponent("files")


// MARK: Types

struct PropertyKey {

    static let nameKey = "name"

    static let urlKey = "url"

}


// MARK: Initialization

init?(name: String, url: NSURL) {

    self.name = name

    self.url = url

    super.init()

    if name.isEmpty {

        return nil

    }

}


// MARK: NSCoding

func encodeWithCoder(aCoder: NSCoder) {

    aCoder.encodeObject(name, forKey: PropertyKey.nameKey)

    aCoder.encodeObject(url, forKey: PropertyKey.urlKey)

}

required convenience init?(coder aDecoder: NSCoder) {

    let name = aDecoder.decodeObjectForKey(PropertyKey.nameKey) as! String

    let url = aDecoder.decodeObjectForKey(PropertyKey.urlKey) as! NSURL

    self.init(name: name, url: url)

}

}

Когда я просматриваю входящий PDF файл из почты, он загружается в отдельный UIWebView в качестве таких:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    // Incoming Emailed PDF from the 'Open-in' feature
    if incomingFileTransfer != nil {

        // Show incoming file

        let request = NSURLRequest(URL: incomingFileTransfer!)

        incomingView.loadRequest(request)

    }

}

Моя кнопка сохранения указывает на unwind на другом View Controller как:

@IBAction func unwindToMainMenu(sender: UIStoryboardSegue) {

    if let sourceViewController = sender.sourceViewController as? IncomingFileViewController, file = sourceViewController.file {

        if let selectedIndexPath = fileTableNotVisible.indexPathForSelectedRow {

            // Update an existing recipe.

            pdfFiles[selectedIndexPath.row] = file

            fileTableNotVisible.reloadRowsAtIndexPaths([selectedIndexPath], withRowAnimation: .None)

        }

        else {

            // Add a new file

            let newIndexPath = NSIndexPath(forRow: pdfFiles.count, inSection: 0)

            // Add to pdf file array

            pdfFiles.append(file)

            // Adds new file to bottom of table

            fileTableNotVisible.insertRowsAtIndexPaths([newIndexPath], withRowAnimation: .Bottom)

        }

        saveFiles()

    }

}


// MARK: NSCoding

func saveFiles() {

    let isSuccessfulSave = NSKeyedArchiver.archiveRootObject(pdfFiles, toFile: PDFFile.ArchiveURL.path!)

    if !isSuccessfulSave {

        print("Failed to save PDF file")

    }

}

0 ответов

Другие вопросы по тегам