从 Swift 中的 TabluarData DataFrame 中删除行时出现 EXC_BAD_ACCESS 错误

问题描述 投票:0回答:0

我正在使用 TabularData 框架在 Swift 中处理数据。我将 CSV 文件中的数据加载到 DataFrame 中,然后将数据复制到第二个 DataFrame 中,最后从第二个 DataFrame 中删除一行。

当我尝试从第二个 DataFrame 中删除一行时,问题就出现了,此时我收到了 EXC_BAD_ACCESS 错误。但是,如果我在删除行之前修改“timings”列(最后一列)(甚至修改为相同的值),则代码运行不会出现错误。

有趣的是,只有当 CSV 文件的列中的一行包含超过 15 个字符时,才会出现此问题。

这是我正在使用的代码:

func loadCSV() {
    let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    let url = documentsDirectory.appendingPathComponent("example.csv")

    var dataframe: DataFrame
    do {
        dataframe = try .init(
            contentsOfCSVFile: url,
            columns: ["user", "filename", "syllable count", "timings"],
            types: ["user": .string, "filename": .string, "syllable count": .integer, "timings": .string]
        )
    } catch {
        fatalError("Failed to load csv data")
    }

    print("First data frame",dataframe, separator: "\n") /// This works

    var secondFrame = DataFrame()
    secondFrame.append(column: Column<String>(name: "user", capacity: 1000))
    secondFrame.append(column: Column<String>(name: "filename", capacity: 1000))
    secondFrame.append(column: Column<Int>(name: "syllable count", capacity: 1000))
    secondFrame.append(column: Column<String>(name: "timings", capacity: 1000))

    for row in 0..<dataframe.rows.count {
        secondFrame.appendEmptyRow()
        for col in 0..<4 {
            secondFrame.rows[row][col] = dataframe.rows[row][col]
        }
    }
//            secondFrame.rows[row][3, String.self] = String("0123456789ABCDEF") /* If we include this line, it will not crash, even though the content is the same */

    print("Second data frame before removing row",dataframe, separator: "\n") // Before removal
    secondFrame.removeRow(at: 0)
    print("Second data frame after removing row",dataframe, separator: "\n") // After removal—we will get Thread 1: EXC_BAD_ACCESS here. The line will still print, however
}

这是我正在使用的 csv:

user,filename,syllable count,timings
john,john-001,12,0123456789ABCDEF
jane,jane-001,10,0123456789ABCDE

我已经能够使用最少的项目在 macOS 和 iOS 上复制此错误。我不确定为什么会发生此错误以及为什么修改“timings”列会阻止它。

需要注意的是,从 CSV 文件加载单个数据帧也会出现同样的错误,这意味着如果我想随后修改 DataFrame,我基本上无法从 CSV 加载。

swift dataframe csv exc-bad-access
© www.soinside.com 2019 - 2024. All rights reserved.