主线程检查器:在后台线程iOS 11 Xcode 9 GM Seed上调用UI API

时间:2017-09-18 12:10:46

标签: objective-c xcode multithreading ios11 xcode9

任何人都可以帮我调试这个问题,从我开始使用iOS 11 GM种子的Xcode 9 GM种子开始,我的代码在控制台中向我发出警告说:

foreach($_POST['cast_id'] as $cast_id) {

foreach (array_combine($_POST['star'], $_POST['review']) as $star => $review) {

echo $cast_id."<br>";
echo $star."<br>";
echo $review."<br>";

//$reg_action = mysqli_query($con, "UPDATE job_apply_review SET star = '$star', review = '$review'  WHERE cast_id = '$cast_id'");



}

}

另外,我在我的应用程序中使用ESRI地图,当我放大或缩小ESRI地图时,我收到此错误:

2017-09-18 16:22:52.872716+0530 **** *****[359:20158] [reports] Main Thread Checker: UI API called on a background thread: -[UIApplication 
  applicationState] .PID: 359, TID: 20158, 
  Thread name: Runtime Network Callback Thread, 
  Queue name: com.apple.root.default-qos.overcommit, QoS: 21
  Backtrace:

应用程序适用于Xcode 8 iOS 10.3.3。问题似乎与Xcode 9有关。任何人都可以帮我调试这个问题。感谢

1 个答案:

答案 0 :(得分:3)

Xcode 9添加了一个新的运行时检查,即Main Thread Checker

根据Apple文档:

  

主线程检查器是Swift和C语言的独立工具   检测到AppKit,UIKit和其他API的无效使用情况   背景线程。在主线程以外的线程上更新UI   是一个常见的错误,可能导致错过UI更新,视觉   缺陷,数据损坏和崩溃。

您在使用Xcode 8的应用中已经遇到此问题。只是检测它的工具还没有。

在您的情况下,它似乎是对UIApplication.shared.applicationState的调用导致此运行时问题。

您可以将应用方案配置为在发生时停止执行。它是诊断选项卡中主线程检查器部分下的复选框。