从 Xamarin.MAC 迁移后 .NetMAC OS 应用程序上出现 AppKit.NsWindow 错误

问题描述 投票:0回答:1

我有用 C# 语言构建的 Xamarin.MAC 本机应用程序。由于 Xamarin 支持已停止,我必须将其迁移到 .Net MAC OS。但我在 .Net MAC OS 中没有看到 AppKit.Window。在 Xamarin 中,我可以看到创建窗口控制器的选项,但在 .net MAC OS 中,我只能看到创建视图和视图控制器的选项。你知道为什么吗?如何转换现有的窗口和窗口控制器? 我已将现有窗口和窗口控制器复制到 .Net MAC Os 项目,但是当我使用以下代码打开窗口控制器时,出现以下错误。您知道为什么以及如何解决这个问题吗?

homeWindowController = new HomeWindowController ();
CommonClass.HomeController = homeWindowController;
homeWindowController.Window.MakeKeyAndOrderFront (this);

以下是错误详情。

Argue-4000“抛出 Objective-C 异常。名称:NSInternalInconsistencyException 原因:initWithWindowRef:当前不支持 NSWindow 子类! 本机堆栈跟踪: 0 核心基础 0x000000018477c570 __exceptionPreprocess + 176 1 libobjc.A.dylib 0x000000018426deb4 objc_异常_抛出 + 60 2 CoreFoundation 0x000000018477c460 +[NSException异常WithName:原因:用户信息:] + 0 3 AppKit 0x0000000188991398 -[NSWindow(NSCarbonExtensions) initWithWindowRef:]

xamarin .net-6.0 .net-8.0 xamarin.mac .net-mac
1个回答
0
投票

尝试更改窗口控制器和窗口的构造函数以采用

NativeHandle
而不是
IntPtr
,例如

  • MyWindowController(IntPtr handle)
    MyWindowController(NativeHandle handle)
  • MyWindow(IntPtr handle)
    MyWindow(NativeHandle handle)

以前,您的 NSWindow 构造函数会调用

NSWindow(NativeHandle)
构造函数(因为存在从
IntPtr
NativeHandle
的隐式转换)。在 Xamarin -> net6 迁移期间,添加了单独的
NSWindow(IntPtr)
构造函数(以绑定
initWithWindowRef:
选择器),现在您的 Window 构造函数突然调用
NSWindow(IntPtr)
构造函数而不是
NSWindow(NativeHandle)
构造函数(这不会工作)。

这就是修复应该起作用的原因:您的代码将再次调用正确的

NSWindow(NativeHandle)
构造函数。

© www.soinside.com 2019 - 2024. All rights reserved.