【发布时间】:2018-03-20 14:31:00
【问题描述】:
我希望看看是否有人知道这个问题以及任何潜在的解决方法。
我正在使用适用于 Qt (100.2) 的 ArcGIS 运行时 SDK。问题是,如果创建了一个包含地图的地图视图,然后又将其销毁,它会崩溃并显示以下消息:
QCoreApplication::sendEvent 中的 ASSERT 失败:“无法将事件发送到其他线程拥有的对象。当前线程 0x0x174329f60。接收器 ''(类型为 'QRTImpl::LocationDisplayImpl')是在线程 0x0x17001d940 中创建的”,文件内核/ qcore应用程序 .cpp,第 563 行
这不会在 Mac 或 Android 上发生。我为此使用的用例是在堆栈视图中加载的组件中创建地图。当我离开该组件时,stackview 会杀死导致崩溃的 mapview。我创建了一个 Empty ArcGIS qml 应用程序,通过在加载器中显示地图并使用“卸载”它的按钮以更简单的方式测试此问题。一个简单的例子见文章底部。
import QtQuick 2.6
import QtQuick.Controls 1.4
import Esri.ArcGISRuntime 100.2
ApplicationWindow {
id: appWindow
width: 800
height: 600
title: "IosMapTest"
Rectangle {
id: backgroundRect
anchors.fill: parent
color: "red"
}
Loader {
id: mapLoader
anchors.fill: parent
// add a mapView component
sourceComponent: MapView {
anchors.fill: parent
// set focus to enable keyboard navigation
focus: true
// add a map to the mapview
Map {
// add the BasemapTopographic basemap to the map
BasemapTopographic {}
}
}
}
Button {
anchors.bottom: parent.bottom
anchors.right: parent.right
text: "click here for crash"
onClicked: mapLoader.sourceComponent = undefined
}
}
【问题讨论】:
-
不使用 ArcGISRuntime 导入中的类型时是否运行良好?如果是这样,您应该向开发人员提交错误报告。如果它仍然崩溃,请使用 Qt 提交错误报告。
-
是的,它与其他类型运行良好。我会尽快向他们提交错误,但我希望获得更多信息/想法来解决问题,因为我无法继续前进,也无法等待他们实施修复。
-
您可以尝试自己创建 StackView 项目,给每个项目一个
id并以这种方式推送它们,而不是例如推送一个组件或 URL。这样,当它们从堆栈中弹出时,StackView 将知道不销毁它们。 -
这是一个有趣的想法。我可能会在今天晚些时候尝试一下。我目前正在尝试的事情是在我的 main.js 中创建一个实例。然后在加载每个新组件时“重新设置”它们。您认为这是一种解决方法(感觉很脏)?
-
任何解决方法都可能会让人觉得很脏。 :) 我不确定您正在加载哪些组件或解决方法到底是什么样的,所以很难说。
标签: ios qt qml arcgis-runtime