Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 由于未捕获异常“NSInternalInconsistencyException”而终止应用程序。在表视图中获取错误_Swift_Xcode_Swift5 - Fatal编程技术网

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}