2016-10-28 2 views
-2

У меня есть .GPX-файл содержит информацию о маршрутизации похода, который я хочу загрузить в свое приложение. Все нормально, если я загружаю его с удаленного URL (https://dl.dropboxusercontent.com/u/45741304/appsettings/Phu_si_Lung_05_01_14.gpx), но я не могу загрузить этот же файл из пакета приложений (уже в «Скопировать ресурсы пакета» и имел правильное целевое членство).Загрузить файл XML из основного пакета в Swift 3.0

Вот мой код для загрузки этого файла с удаленного URL:

var xmlParser: XMLParser! 


func startParsingFileFromURL(urlString: String) { 
    guard let url = URL(string: urlString) else { 
     print("Can't load URL: \(urlString)") 
     return 
    } 
    self.xmlParser = XMLParser(contentsOf: url) 
    self.xmlParser.delegate = self 
    let result = self.xmlParser.parse() 
    print("parse from URL result: \(result)") 
    if result == false { 
     print(xmlParser.parserError?.localizedDescription) 
    } 

} 

и от основного пучка:

func startParsingFile(fileName: String, fileType: String) { 
    guard let urlPath = Bundle.main.path(forResource: fileName, ofType: fileType) else { 
     print("Can't load file \(fileName).\(fileType)") 
     return 
    } 
    guard let url:URL = URL(string: urlPath) else { 
     print("Error on create URL to read file") 
     return 
    } 
    self.xmlParser = XMLParser(contentsOf: url) 
    self.xmlParser.delegate = self 
    let result = self.xmlParser.parse() 
    print("parse from file result: \(result)") 
    if result == false { 
     print(xmlParser.parserError?.localizedDescription) 
    } 
} 

Ошибки при нагрузке от приложения пачки:

parse from file result: false 
Optional("The operation couldn’t be completed. (Cocoa error -1.)") 

ответ

1

You говорят:

guard let urlPath = Bundle.main.path(forResource: fileName, ofType: fileType) else { 
    print("Can't load file \(fileName).\(fileType)") 
    return 
} 
guard let url:URL = URL(string: urlPath) else { 
    print("Error on create URL to read file") 
    return 
} 

Во-первых, очень глупо превращать строковый путь в URL-адрес. Вы знали, что хотите URL-адреса, так почему вы не начали с вызова url(forResource:...)?

Во-вторых, если вы когда-либо делали do, введите путь строки в URL-адрес, вы должны сделать file URL.

+0

спасибо за предложение, я изменил на 'let url = Bundle.main.url (forResource: fileName, withExtension: fileType)' и все в порядке сейчас – HoangNA