追加到数组导致崩溃

时间:2018-07-25 08:07:56

标签: ios arrays swift append crashlytics

对于这段代码,我有以下崩溃报告。我不确定为什么这是错误的。

崩溃:

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循环中的守卫让路方法可以解决此问题吗?

2 个答案:

答案 0 :(得分:1)

如果您想快速找到数组之间的差异,可以通过几种方法实现。

https://developer.apple.com/documentation/swift/set

您可以选择subtract或通过formSymmetricDifference创建一个新的集合。

答案 1 :(得分:0)

我自己刚刚收到此错误。对我来说,这是由于修改了来自不同线程的数组引起的。数组不是线程安全的。

我使用GCD解决了这个问题,并将append操作放在了一个同步块中。在另一个地方,我使用NSCache解决了该问题,因为NSCache已经是线程安全的。