Swift 由于未捕获异常“NSInternalInconsistencyException”而终止应用程序。在表视图中获取错误
选择和取消选择表的行时出现以下错误Swift 由于未捕获异常“NSInternalInconsistencyException”而终止应用程序。在表视图中获取错误,swift,xcode,swift5,Swift,Xcode,Swift5,选择和取消选择表的行时出现以下错误 DispatchQueue.main.async { for arr in result.arrayValue { self.arrData.append(filterCity (json: arr)) } self.filter_Table.reloadData() } 由于未捕获异常而终止应用程序 “NSInternalInconsistencyException”,原因:“对 布局引擎不能在它之后从后台线程执行
DispatchQueue.main.async {
for arr in result.arrayValue {
self.arrData.append(filterCity (json: arr))
}
self.filter_Table.reloadData()
}
由于未捕获异常而终止应用程序
“NSInternalInconsistencyException”,原因:“对
布局引擎不能在它之后从后台线程执行
已从主线程访问。”
DispatchQueue.main.async {
for arr in result.arrayValue {
self.arrData.append(filterCity (json: arr))
}
self.filter_Table.reloadData()
}
我还没有看到您的所有代码,但您可能不应该从后台线程访问arrData。此外,仅重新加载表视图一次。这应该可以防止撞车
DispatchQueue.main.async {
for arr in result.arrayValue {
self.arrData.append(filterCity (json: arr))
}
self.filter_Table.reloadData()
}
但这段代码可以进一步重构。首先,您总是附加到数组中,但从不创建新的数组。如果执行两次web请求,则如果将数据附加到同一数组中,数据将被复制。解决方案是重新创建阵列,并在完成后将其分配给
DispatchQueue.main.async {
for arr in result.arrayValue {
self.arrData.append(filterCity (json: arr))
}
self.filter_Table.reloadData()
}
let array = result.arrayValue.map { self.filterCity(json: $0) }
DispatchQueue.main.async {
self.arrData = array
self.filter_Table.reloadData()
}
可能与问题无关,但在循环的每次迭代中重新加载表视图是一种不好的做法。在循环后重新加载一次。将下面的代码置于for循环之外。DispatchQueue.main.async{self.filter\u Table.reloadData}