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

标签 ios swift csv nsurlrequest mutable

我正在尝试从 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/

相关文章:

ios - 如何创建自定义 NavigationBar 子类并在其中添加多个项目

objective-c - Swift SKScene 在 Objective-C 项目中显示为空白

Python Pandas 名称错误 : StringIO is not defined

csv - 将包含带引号的值的表导出到 hive 中的本地 csv

c# - 让 Apple Keychain 识别 Bouncy CaSTLe .NET 创建的 PKCS12 (.p12) 存储

iOS 表格 View 查找单元格

iphone - 从 iPhone 应用程序链接到播客的选项有哪些?

swift - 发送数据到另一个 View : can't unwrap option

ios - 播放器快速崩溃应用程序

CSV 与 TXT 文件中的 Java BufferedReader 行为