ios - iOS 更新 14.4.2 后 Swift 中的列表操作问题
问题描述
多年来,我使用这个简单的代码在 Swift 中读取和操作列表:
if (Helper.hasSubscription()) {
self.allVisitedTrackHandles = Database.getAllCompletedTrackHandles(withDeleted: false, userid: self.userid)
if (self.allVisitedTrackHandles.count > 0) {
var counter = 0
for th: TrackHandle in self.allTrackHandles {
if self.allVisitedTrackHandles.contains(where: { $0.trackid == th.trackid }) {
for thv: TrackHandle in self.allVisitedTrackHandles {
if thv.trackid == th.trackid {
self.allTrackHandles[counter].date_in_milliseconds = thv.date_in_milliseconds
break
}
}
self.allTrackHandles[counter].visited = 1
}
counter += 1
}
}
}
将我的 iOS 设备更新到 iOS 14.4.2 后,应用程序在此行崩溃:
for th: TrackHandle in self.allTrackHandles
Xcode 给我的唯一反馈是:Thread 79: EXC_BAD_ACCESS (code=1, address=0x12f100010)
解决方案
我不知道为什么那条线会突然开始崩溃;显示的代码中没有任何内容会导致崩溃。您是否在其他地方更新阵列?这可能是线程问题吗?
您可以重构此代码,使其更简单、更清晰、更高效。这可能会有所帮助;
if Helper.hasSubscription() {
self.allVisitedTrackHandles = Database.getAllCompletedTrackHandles(withDeleted: false, userid: self.userid)
if !self.allVisitedTrackHandles.isEmpty {
for index in 0..<self.allTrackHandles.count {
if let visited = self.allVisitedTrackHandles.first { $0.track id == self.allTrackHandles[index].track id } {
self.allTrackHandles[index].date_in_milliseconds = visited.date_in_milliseconds
}
self.allTrackHandles[index].visited = 1
}
}
}
推荐阅读
- functional-programming - 伊德里斯不可能的关键字证明了一个错误的命题
- c# - .NET Core / JQuery.Load 带参数
- spring - 自动触发spring批处理作业
- spring-boot - 我可以将 Spring Boot 配置元数据生成为 .properties 文件吗
- ssis - 为什么 SSIS 包在验证步骤后停止并且不运行任务?
- powershell - 如何从 powershell 显示活动目录浏览器
- flutter - 如何在 Flutter 应用中打开 pdf、pptx、doc、docx 文件?
- python - 在 Django 中使用 python 读取 zip 文件夹中的文件时权限被拒绝错误
- javascript - 如何使用 Fabric js 以编程方式自由绘制?
- python - python中的正则表达式:将2个正则表达式组合为一个