swift5 - 读取数据时 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
}
如果有人遇到同样的问题并找到解决方案,请帮助我。我不知道我在哪里做错了。
解决方案
推荐阅读
- netlogo - 如何找到具有条件的海龟列表的最大元素
- excel - 我可以使用 VLOOKUP 查找某个日期并提取该日期所需的所有数据吗?
- java - 在分组时计算值中的元素按键中的属性
- scala - Spark 中针对存储在 Hive 表中的图的长线性查询
- ios - 导航项标题视图在 iPhone 8 上出现两次
- javascript - Web Audio API 无法在 iOS 13.3 版上播放。适用于旧版本的 iOS
- rx-java - 如何在 RxJava 中获得布尔组合运算符的“短路”行为
- karate - 空手道:包含功能
- c# - JSON 值无法转换为 System.DateTime
- postgresql - 合并到“合并”时出错的语句