首页 > 解决方案 > 读取数据时 FileHandler 出现问题

问题描述

我想将一些数据写入文件并读取完全相同的模型。我的数据包括一些 Int8、Int16 和 Bool 类型。它们属于不同的模型。我成功地将数据写入文件。但是当我尝试读取该文件时,值都是错误的。

我的一个模型重复了 5 次:

struct SomeDataModel   {
        var value1: Bool
        var value2: Int16
        var value3: Int16
        var value4: Int16
        var timeStamp: Int64

}

在前一个模型之后将出现一次的另一个模型。

struct AnotherDataModel  {
var onWrist: Bool
var value1: Int8
var value2: Int8
var value3: Int8
var timeStamp: Int64

}

我在转换中使用了该扩展:

extension Data {

init<T>(from value: T) {
    var value = value
    let pointer = UnsafeBufferPointer(start: &value, count: MemoryLayout<T>.size)
    self.init(buffer: pointer)
}

func object<T>() -> T {
    return self.withUnsafeBytes { $0.load(as: T.self) }
}

}

这部分是我将模型写入文件的地方:

override func writeData(model: TestDataModel, fileName: String) throws {
    var data: Data = Data()
    let date = Date().beginOfToday()
    

    var minute: Int = 0
    var timeStamp: Int64 = 0
    var tempCounter: Int = 0
    
    for k in 1...20{
            for i in  1...5{
                
                timeStamp = Int64(TimeStampHelper.GenerateTimeStamp(date: date.addMinutes(noOfMin: minute)))
                
                let minuteModel = model.minuteDataList[i-1]
                data.append(Data(from: minuteModel.value1))
                data.append(Data(from: minuteModel.value2))
                data.append(Data (from: minuteModel.value3))
                data.append(Data(from: minuteModel.value4))
                data.append(Data(from: timeStamp))
                
                tempCounter = minute
                minute += 1
                
            }
        let fiveMinutesModel = model.fiveMinutesDataList[k-1]
        data.append(Data(from: fiveMinutesModel.value1))
        data.append(Data(from: fiveMinutesModel.value2))
        data.append(Data(from: fiveMinutesModel.value3))
        data.append(Data(from: fiveMinutesModel.value4))
        data.append(Data(from: timeStamp))
        
        minute = tempCounter
       
        minute += 1
    }

    let folderURL = try FileManager.default.url(
               for: .documentDirectory,
               in: .userDomainMask,
               appropriateFor: nil,
               create: true
           )
    let fileURL = folderURL.appendingPathComponent(fileName+".rtf")
           
    try data.write(to: fileURL)
   
}

问题出在我读取数据的地方。没有例外,但值都是不正确的。

init(fileHandle: FileHandle?, fileName: String){

    var minuteDataList: [SomeDataModel] = [SomeDataModel]()
    var fiveMinutesDataList: [AnotherDataModel] = [AnotherDataModel]()
   
    let date: Date = Date().getFormatIndependent(fromString: fileName, format: .isoDate)

    for _ in 1...20{
            for _ in 1...5
            {
                
                
                let minuteModel: SomeDataModel = SomeDataModel(fileHandle: fileHandle)
                minuteDataList.append(minuteModel)
                
            }
        
       
        let fiveMinutesModel: AnotherDataModel = AnotherDataModel(fileHandle: fileHandle)
        fiveMinutesDataList.append(fiveMinutesModel)
        
       
        
    }
    
   fileHandle?.closeFile()
   
    self.date = date
    self.minuteDataList = minuteDataList
    self.fiveMinutesDataList = fiveMinutesDataList
    
}
    

如果有人遇到同样的问题并找到解决方案,请帮助我。我不知道我在哪里做错了。

标签: swift5filehandle

解决方案


推荐阅读