【问题标题】:NSXMLParser I implemented with Swift works on iOS 8 but not on 7.1我用 Swift 实现的 NSXMLParser 适用于 iOS 8 但不适用于 7.1
【发布时间】:2014-08-20 02:16:05
【问题描述】:

长话短说,我从 RSS 提要中提取了一些数据,一切正常。好吧,直到我决定在 iOS 7.1 模拟器上测试它。它马上就崩溃了。

这是我在 ViewDidLoad 中创建的 XML 解析器:

    var parser = NSXMLParser()
    var url: NSURL = NSURL.URLWithString("http://exampleURLforthisPost.com/?feed=rss2")

    parser = NSXMLParser (contentsOfURL: url)

    parser.delegate = self

    parser.shouldProcessNamespaces = false

    parser.shouldReportNamespacePrefixes = false

    parser.shouldResolveExternalEntities = false

    parser.parse()

它在 iOS 8 上运行良好,但是当我在 iOS 7.1 上运行它时,在“parser = NSXMLParser (contentsOfURL: url)”行上指定了“EXC_BAD_ACCESS”错误。在运行 iOS 7.1 时我应该指定什么不同的东西吗?

感谢您的帮助!

【问题讨论】:

  • 错误信息是什么
  • @Bryan Chen - 这是我的问题的一部分。控制台没有显示任何信息。我只能找到“parser = NSXMLParser (contentsOfURL: url)”上的绿色指令指针行,说明线程一上有一个“EXC_BAD_ACCESS(code=1, address0x18)”。有关从 Xcode 获取更多信息的任何建议?
  • 尝试var parser : NSXMLParser! = NSXMLParser(contentsOfURL: url) 并检查解析器是否为零
  • 好吧,这恰好适用于 iOS 7 和 8!不能感谢你!它必须与 Swift 选项有关。 =D

标签: ios7 swift ios8


【解决方案1】:

我在 ios8 下遇到了同样的问题。但是,我有一个堆栈跟踪;

#0  0x000000010930b87c in CFStringCreateCopy ()
#1  0x000000010ae753d4 in Foundation._convertNSStringToString (ObjectiveC.NSString) -> Swift.String ()
#2  0x0000000108a3fffb in @objc Fuel_Locator.FuelWatchReader.parser (Fuel_Locator.FuelWatchReader)(ObjectiveC.NSXMLParser, didEndElement : Swift.String, namespaceURI : Swift.String, qualifiedName : Swift.String) -> () ()
#3  0x0000000108d2c6ad in _endElementNs ()
#4  0x0000000108b1dd96 in xmlParseEndTag2 ()
#5  0x0000000108b20424 in xmlParseTryOrFinish ()
#6  0x0000000108b1f4b0 in xmlParseChunk ()
#7  0x0000000108d299be in -[NSXMLParser parseData:] ()
#8  0x0000000108d29c1f in -[NSXMLParser parseData:] ()
#9  0x0000000108d29d7a in -[NSXMLParser parseFromStream] ()

这个结果不好,因为它表明当解析器试图快速复制它从 XML 中读取的 NSString 时,问题正在发生。顺便说一句,这只发生在即将在委托中调用 didEndElement 方法时。如果该方法不存在,则不会发生错误……但这几乎没有用。

【讨论】:

  • 我在 Yosemite 的 Xcode 6.1 beta 中运行时遇到了类似的问题。 EXC_BAD_ACCESS 在几乎完全相同的位置。
【解决方案2】:

试试

var parser : NSXMLParser! = NSXMLParser(contentsOfURL: url)

看起来NSXMLParser(contentsOfURL: url) 可能会在错误情况下返回nil(例如无效的 URL),因此您需要将其分配给一个可选值以避免解包 nil 值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多