gpt4 book ai didi

ios - 如果没有连接、Internet 或其他方式获取 URL 的内容,则 XMLParser 的子类会因 contentsOfURL 初始值设定项而崩溃

转载 作者:搜寻专家 更新时间:2023-10-30 22:17:21 26 4
gpt4 key购买 nike

我正在尝试整理一个 issue如果没有连接以获取指定 URL 的内容(例如,应用程序处于离线状态),提要解析框架 ( FeedKit ) 会崩溃。

因此,它在 App 在线时有效,并且仅在线。

每当我尝试使用父类(super class) XMLParser 的便利初始化程序实例化我的 Parser 类时

convenience init?(contentsOf url: URL)

框架崩溃:

enter image description here

为了尝试隔离问题并排除框架中引入的一些错误,我在一个干净的项目中重新创建了该问题:

一个像魅力一样工作的解决方案,使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com