Mac Catalyst 上的 .Net MAUI 应用程序的拖放似乎已损坏,但仅限于 Apple Silicon 设备。我需要修复或解决方法,但到目前为止我还没有成功。
我在 .Net Maui 8 中构建了一个重要的 B2B 应用程序,该应用程序严重依赖“拖放”功能将图像从列表复制到 2D 布局。客户最近扩大了项目范围,包括 MacOS 支持(我们之前支持 iPad 和 Windows)。不幸的是,当通过 Mac Catalyst 在 Mac 上运行该应用程序时,拖放功能被破坏。开始拖动时,调试输出中会显示以下错误消息:
2024-07-16 06:31:15.674 MacCatalystDragDropTest[1058:13565] Cannot find representation conforming to type com.apple.uikit.private.drag-item
拖动似乎开始(拖动的项目按预期随鼠标指针移动)。当我尝试放到目标上时,调试输出中出现以下错误:
2024-07-16 06:31:16.294 MacCatalystDragDropTest[1058:13565] *** Assertion failure in -[NSFilePromiseReceiver receivePromisedFilesAtDestination:options:operationQueue:reader:], NSFilePromiseReceiver.m:349
目标的
DropGestureRecognizer
上的事件/命令不会触发,并且在重新启动应用程序之前无法再次拖动源元素。
我创建了一个非常基本的测试应用程序,以确认问题与主应用程序中的应用程序特定代码无关。您可以在此存储库找到测试应用程序。这是一个库存 .Net Maui 应用程序,其中添加了以下元素
MainPage.xaml
:
<Image Source="dotnet_bot.png">
<Image.GestureRecognizers>
<DragGestureRecognizer/>
</Image.GestureRecognizers>
</Image>
<Image Source="dotnet_bot.png">
<Image.GestureRecognizers>
<DropGestureRecognizer/>
</Image.GestureRecognizers>
</Image>
此示例应用程序显示与我的原始应用程序相同的行为。 请注意,尚未在 Intel Mac 上观察到此行为。已在至少两款使用 Apple M2 处理器的设备上得到证实。
前进的道路!你能帮忙吗?是否有其他方法可以使用本机视图?我缺少
GestureRegonizer
的东西吗?
此错误是由通过远程管理(在我的例子中为 RealVNC Viewer)操作 Mac 引起的。当连接硬件并直接操作Mac时,该错误消失。我们的应用程序在生产中不需要远程管理支持,因此我将此问题标记为已解决。