我有这段代码的以下崩溃报告。我不确定为什么这是错误的。
崩溃:
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已经是线程安全的。