gpt4 book ai didi

ios - 如何从 NSURLRequest 获取可变数据

转载 作者:行者123 更新时间:2023-11-30 10:59:02 25 4
gpt4 key购买 nike

我正在尝试从 URL 检索文本文件,然后以 swift 数据表单处理该文本文件。它类似于 CSV 文件,但使用“|”用于列分隔符,“}”用于行分隔符。

我想删除第一个“行”直到“}”字符(我的行分隔符是“}”,以便我可以循环浏览文件直到它为空。

但是 NSURLRequest 返回一个不可变的 Swift Data 对象。

我想我可以将它复制到可变副本中,但如果我可以说服 NSURLRequest 返回一个可变数据对象,我更喜欢它。这可能吗?

我的 URL 请求如下所示:

    func load(url: String) {

debugPrint(#function)
let url = URL(string: url)!
let task = URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
self.handleClientError(error: error)
return
}
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode) else {
self.handleServerError(error: response)
return
}
debugPrint("data got")

self.dataGot(data: data!)
DispatchQueue.main.async {

self.loadingDelegate!.stockLoadComplete()

}

}
task.resume()


}

目前,我正在从整个文件创建一个字符串,并执行一些字符串操作来分割行和列:

        let asString = String(data: data, encoding: String.Encoding.utf8)

let rows = asString!.components(separatedBy: "}")
for row in rows {
self.addPriceLine(line: row)
}

这种方法因 malloc 错误而失败(在成功处理几百行之后),因此我怀疑我不知何故走错了路。

有“好的”或推荐的方法吗?对我来说,仅使用 Data 对象似乎更优雅。

感谢您的建议。

最佳答案

好的,我解决了这个问题。

我收到运行时 malloc 错误,这让我认为数据缓冲区或其转换为字符串存在问题。

我想知道闭包中的内存分配是否失败,因此我将 gotData() 处理放到主调度队列中。瞧 - malloc 消失了。

显然,你应该在闭包中做什么是有限制的,而不是在主调度队列中,我想我滥用了这种方法。

:)

        let task = URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
self.handleClientError(error: error)
return
}
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode) else {
self.handleServerError(error: response)
return
}
debugPrint("data got")

DispatchQueue.main.async {
self.dataGot(data: data!)

self.loadingDelegate!.stockLoadComplete()

}

}

关于ios - 如何从 NSURLRequest 获取可变数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53617306/

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