【问题标题】:ArcGIS Runtime SDK: Mapview crash on iOSArcGIS Runtime SDK:iOS 上的 Mapview 崩溃
【发布时间】: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


【解决方案1】:

这似乎是 ArcGIS Runtime 中的一个错误,因此我在我们的系统中记录了一个错误。我能想到的唯一解决方法是不要在每次浏览堆栈时创建/销毁页面。

【讨论】:

  • 对于任何好奇的人,我专门通过在 main.qml 中创建一个实例来解决这个问题,然后在加载每个新组件时对其进行“重新设置”。所以我仍然创建和销毁我的页面,但不是地图本身,它只是根据需要移动到页面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多