我正在尝试整理一个 issue如果没有连接以获取指定 URL 的内容(例如,应用程序处于离线状态),提要解析框架 ( FeedKit ) 会崩溃。
因此,它在 App 在线时有效,并且仅在线。
每当我尝试使用父类(super class) XMLParser
的便利初始化程序实例化我的 Parser
类时
convenience init?(contentsOf url: URL)
框架崩溃:
为了尝试隔离问题并排除框架中引入的一些错误,我在一个干净的项目中重新创建了该问题:
一个像魅力一样工作的解决方案,使用 Foundation 框架的普通 vanilla 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对这个问题。
我相信这是 Apple 端的错误,但我宁愿犯错并进行修复。
最佳答案
这看起来像一个错误。
但是,您可以在Parser
中重写XMLParser
类的指定初始化器和便利初始化器,并实现您自己的逻辑
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")
}
关于ios - 如果没有连接、Internet 或其他方式获取 URL 的内容,则 XMLParser 的子类会因 contentsOfURL 初始值设定项而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40193859/