首页 > 解决方案 > SwiftUI 拖放错误“NSInternalInconsistencyException”

问题描述

我有一个实现本机拖放 api 的 swiftUI 应用程序。一切正常,但我发现了一个我不明白如何修复的边缘情况。本质上,应用程序的整个视图(设备屏幕的大小)都是放置目标。拖动要放置的对象时,如果用户将项目移动到屏幕边缘,应用程序将崩溃并抛出错误:

'NSInternalInconsistencyException', reason: UIDragPreviewTarget requires that the container view is in a window, but it is not

我认为这与放置目标有关,并试图将拖动对象移出应用程序的窗口,但我不知道如何处理这种边缘情况。

任何帮助将不胜感激

编辑:我注释掉了.onDrop()修饰符并且崩溃仍然存在。我只能猜测生成UIDragPreviewTarget的是在内部跟踪它的位置但是当它被拉出应用程序的框架时它会抛出错误

标签: iosswiftdrag-and-dropswiftui

解决方案


在深入挖掘并创建了一个新的简化项目以证明这不是 SwiftUI 中的拖放实现中的错误之后,我想我找到了问题所在。

就我而言,我有一个视图,其中包含我需要的数据,位于我希望能够将数据拖入的视图上方。在拖动过程中,我希望顶视图自行消失,以便不再阻碍下视图。我以两种方式之一拨动了这个开关。

  1. 当开始对原始数据的拖动过程时,我启动了一个计时器,它会给你 1.5 秒的时间来取消拖放,然后它才会隐藏视图。
  2. 当进入下视图的放置目标时,它会关闭顶视图

删除这两个操作消除了崩溃。

我在这一点上的假设是,隐藏数据的原始来源会破坏 dragItem 的“家”感,当您尝试将其拖出屏幕时,它也没有返回的地方。


推荐阅读