Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IOS-GPX file parser.parse()操作无法执行’;不可能完成_Ios_Xml_Swift_Gpx - Fatal编程技术网

IOS-GPX file parser.parse()操作无法执行’;不可能完成

IOS-GPX file parser.parse()操作无法执行’;不可能完成,ios,xml,swift,gpx,Ios,Xml,Swift,Gpx,考虑到我认为自己有足够的XMLParserDelegate委托方法,我很沮丧地发现为什么我下面的代码没有解析GPX文件的内容 这是输入的GPX文件 <?xml version="1.0"?> <gpx version="1.1" creator="Xcode"> <wpt lat="42.373734" lon="-71.178314"> <name>A's house</name> </wpt> &

考虑到我认为自己有足够的XMLParserDelegate委托方法,我很沮丧地发现为什么我下面的代码没有解析GPX文件的内容

这是输入的GPX文件

<?xml version="1.0"?>  
<gpx version="1.1" creator="Xcode">
  <wpt lat="42.373734" lon="-71.178314">
    <name>A's house</name>
  </wpt>
  <wpt lat="41.094082" lon="-73.519411">
    <name>B's Office</name>
  </wpt>
  <wpt lat="42.350816" lon="-71.065578">
    <name>W Hotel</name>
  </wpt>
  <wpt lat="42.352291" lon="-71.045283">
    <name>District Hall</name>
  </wpt>
</gpx>

您的代码是否达到了对
parser.parse()
的调用?是否调用了
didStartElement
delegate方法?我在每一行中都使用了单步,它实际上进入了这个调用。但是我不知道为什么不执行if部分?elementName的值是多少?您的
元素
变量有什么意义?为什么不简单地比较一下
elementName
?很抱歉我的代表迟到了。全局变量
element
在语义上的使用并不重要。但是我使用它是因为我合并了另一个函数
func parser(parser:XMLParser,foundCharacters string:string)
来使用
element
。我编辑了我的问题细节,其中包括
XMLParserDelegate
的后一个代表,并为
parser.parse()
设置了标志。问题完全取决于为什么解析在打印出条件失败时无法启动
class AutoCheckInVC: UIViewController, UITableViewDataSource, UITableViewDelegate, CLLocationManagerDelegate, XMLParserDelegate{
.........
private var element: String?
private var locArray = [String]()
private var parser : XMLParser = XMLParser()

func beginParsing(){
    guard let path = Bundle.main.path(forResource: "TestLocations", ofType: "gpx") else {
        NSLog("Couldn't find the gpx file!!!")
        return
    }
    guard let url = URL(string: path) else {
        preconditionFailure("URL is nil!!!")
    }
    guard let parser = XMLParser(contentsOf: url) else {
        preconditionFailure("XML file is nil!!!")
    }
    parser.delegate = self
    let beParsed = parser.parse()

    if beParsed {
        NSLog("Start an event-driving parsing")
    }
    else {
        preconditionFailure("Failed to start parsing")
    }
   }

func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
    element = elementName
    /** The code doesn't execute inside the if part. Why???**/
    if (element == "wpt") {
        //create the string array from the file
        let long = attributeDict["lon"]!
        let lat = attributeDict["lat"]!
        self.curLL = "\(lat),\(long)" as String?
        debugPrint("Lon, Lat of current point is: \(String(describing: self.curLL))")
    }
}
func parser(_ parser: XMLParser, foundCharacters string: String) {
    let data = string.trimmingCharacters(in: NSCharacterSet.whitespacesAndNewlines)
    if (!data.isEmpty) {
        if (element == "wpt"){
            locArray[data] = self.curLL as String?
        }
    }
}

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.delegate = self
    tableView.dataSource = self

    beginParsing()        /*****Something wrong here!!!****/
    debugPrint("LocArray:       \(locArray)")

    for i in 0..<venue.numOfElements() {
        let venueTemp = venue.readHistory(atIndex: i)

        let para1: Parameters = [
            //Required: name, ll, and version date
            "ll": locArray[i]
  ]
}