在iOS中将大文件数据存储到Coredata的最佳方法是什么

时间:2018-07-13 13:04:34

标签: ios core-data nsfilemanager nsstream nsfilehandle

我正在尝试将3万个用户的详细信息存储到核心数据中。为此,我进行了搜索,并提出了一种解决方案,将所有数据保存为CSV格式的文件。 我可以使用以下代码下载和读取CSV文件:

func readCsvFile () {

    if let path = Bundle.main.path(forResource: "users", ofType: "csv") {

        if FileManager.default.fileExists(atPath: path){
            if let fileHandler = FileHandle(forReadingAtPath: path){
                if let data = fileHandler.readDataToEndOfFile() as? Data{

                    if let dataStr = String(data: data, encoding: .utf8){
                        print(dataStr)
                    }
                }
            }
        }
    }

}

但是现在的问题是,当我从文件中读取整个数据时,它会导致内存问题。我需要阅读一些内容并处理核心数据存储。再次返回并继续从我离开的地方继续读取数据。 我的文件包含以下数据:

Firstname,Lastname,Email,Phone,Title
Tanja,van Vlissingen-ten Brink,1,,Vulr(st)er
Berdien,Huismn Noornnen,2,,Filanager
Ailma,Ankit,3,,Vulr(st)er
Rzita,Salmani Samani,4,,Vulr(st)er
DeEora,Levaart,5,,Eerste Vulr(st)er
Kirsten,Veroor,6,,Vulr(st)er
Tristan,Haenbol,7,,Vulr(st)er
Manon,Bland,8,,Aankomend Vulrer
Naomi,Ruman,9,,Aankomend Vulrer

所以我发现使用NSFileHandler可以将文件光标移动或查找到文件中的特定位置,但是它需要偏移量:

fileHandler = FileHandle(forReadingAtPath: path)
fileHandler.seek(toFileOffset: 10)

但是我不知道如何识别我已经阅读了特定数量的行,现在返回到下一组行。 另外,NSStream是读取文件的方式,但我没有对此进行探讨。

0 个答案:

没有答案