我有用 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:]
尝试更改窗口控制器和窗口的构造函数以采用
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)
构造函数。