ios - 附加到数组导致崩溃
问题描述
对于这段代码,我有以下崩溃报告。我不确定为什么这是错误的。
碰撞:
Crashed: com.apple.root.background-qos
0 libswiftCore.dylib 0x1082ebf94 specialized _fatalErrorMessage(_:_:file:line:flags:) + 106516
1 libswiftCore.dylib 0x10818c214 default argument 0 of _preconditionFailure(_:file:line:) + 109688
2 libswiftSwiftOnoneSupport.dylib 0x108804d60 specialized _ArrayBufferProtocol._arrayOutOfPlaceUpdate<A>(_:_:_:_:) + 55124
3 libswiftSwiftOnoneSupport.dylib 0x1087f9178 specialized Array._copyToNewBuffer(oldCount:) + 7020
4 libswiftSwiftOnoneSupport.dylib 0x1087f51bc specialized Array.append(_:) + 17480
代码:
self.missingEmployees.removeAll()
for eid in eids {
let indexFound = self.employees.index(where: {$0.employeeId == eid})
if indexFound == nil {
self.missingEmployees.append(eid)
}
}
守卫会让 for 循环中的方法摆脱这个问题吗?
解决方案
我自己刚刚收到此错误。对我来说,这是由不同线程修改数组引起的。数组不是线程安全的。
我使用 GCD 解决了这个问题,并将附加操作放在同步块中。在另一个地方,我使用 NSCache 解决了它,因为 NSCache 已经是线程安全的。
推荐阅读
- javascript - 为什么我的子组件不会在父状态更改时重新渲染?
- javascript - React Native Webview:如何在onScroll上触发一次功能?
- javascript - 将标头发送到nodejs中的客户端后无法设置标头
- javascript - Gatsby.js 博客在帖子中添加了两次“/blog”
- r - “装配工出错......”尝试使用 rms 库中的 lrm 函数时
- sql - 以数字形式检索日期(5 位);如何转换为常规日期格式?
- python - 使用 openpyxl 为图表平铺分配单元格引用
- ios - 未调用 isEnabled 的 willSet 的 Storyboard UIButton 扩展
- c# - SSIS DataFlow 脚本组件 Oracle 和 SQL Server 连接管理器感到困惑
- javascript - 当输入字段聚焦并按下输入键时如何触发功能?