长话短说,我从RSS源中提取了一些数据,一切都运行良好。好吧,直到我决定在iOS 7.1模拟器上测试它。它马上就崩溃了。
这是我在ViewDidLoad中创建的XML Parser:
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时,我应该指定一些不同的东西吗?
感谢您的帮助!
答案 0 :(得分:2)
尝试
var parser : NSXMLParser! = NSXMLParser(contentsOfURL: url)
看起来NSXMLParser(contentsOfURL: url)
可能会在错误情况下返回nil
(例如无效的网址),因此您需要将其分配给可选值以避免解包nil值。
答案 1 :(得分:2)
我在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
方法时才会发生这种情况。如果该方法不存在,则不会发生错误......但这几乎没有用。