我试图整理issue,如果没有连接来获取指定网址的内容(例如应用离线),则Feed解析框架(FeedKit)崩溃)。
因此,当应用程序在线并且仅在线时,它可以正常工作。
每当我尝试使用超类Parser
XMLParser
类时
convenience init?(contentsOf url: URL)
框架崩溃了:
为了尝试隔离问题,并排除框架中引入的一些错误,我在一个干净的项目中重新创建了这个问题:
一个像魅力一样的解决方案,使用Foundation框架的普通的XMLParser:
let feedURL = URL(string: "http://images.apple.com/main/rss/hotnews/hotnews.rss")!
if let parser = XMLParser(contentsOf: feedURL) { // Works as expected
print("Got instance \(parser)")
}
另一个没有:
class Parser: XMLParser { }
let feedURL = URL(string: "http://images.apple.com/main/rss/hotnews/hotnews.rss")!
if let parser = Parser(contentsOf: feedURL) { // Crash!
print("Got instance \(parser)")
}
在第二个例子中,我所做的只是对XMLParser
类进行子类化。没有覆盖或自定义代码。它仍然崩溃。
我错过了什么吗?
谢谢
编辑:
向Apple提交了错误报告,编号为28904764,并为此问题打开了Radar。
我确信这是苹果公司最终的一个错误,但更愿意出错并做出修复。
答案 0 :(得分:2)
这看起来像个错误。
但是,您可以覆盖XMLParser
中Parser
类的指定和便利初始值设定项并实现您自己的逻辑
class Parser: XMLParser {
override init(data: Data)
{
super.init(data: data)
}
convenience init?(contentsOf url: URL){
//return data or null examining data from url
do{
let data = try Data(contentsOf: url)
self.init(data: data)
}catch{
return nil
}
}
}
并致电
let feedURL = URL(string: "http://images.apple.com/main/rss/hotnews/hotnews.rss")
if let parser = Parser(contentsOf: feedURL!){
print("Got instance \(parser)")
}else{
print("no data in url")
}
答案 1 :(得分:-1)
我认为这是URL的问题。我试过你的代码我得到了错误。
Unable to read data
我尝试更换网址,
feedURL = NSURL(string:"http://images.apple.com/main/rss/hotnews/hotnews.rss#sthash.fuVEonEt.dpuf")!
parser = XMLParser(contentsOf:feedURL as URL)!
parser.delegate = self
parser.parse()
一切正常。 (我使用的是Swift 3)