gpt4 book ai didi

objective-c - 处理 awakeFromNib 中的错误的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-03 17:40:07 29 4
gpt4 key购买 nike

在我的主应用程序 (MyApp) 中,我通过创建窗口 Controller (MyWindowController) 的新实例以编程方式创建其他窗口。当窗口 Controller 初始化时,它通过调用[self.window makeKeyWindow]从nib文件加载窗口和其他 View /对象。在这些对象之一 (MyModel) 的 awakeFromNib 方法中,有一些代码可能会失败(由于名称解析),我想向用户,并销毁窗口 Controller 、窗口和所有相关对象。

总结:

  1. 应用程序创建 MyWindowController 的新实例。
  2. MyWindowController 通过调用 [self.window makeKeyWindow] 从 nib 文件加载窗口和其他 View /对象。
  3. awakeFromNib 期间,这些对象之一(MyModel 的实例)遇到故障(由于名称解析)。
  4. 向用户显示一条错误消息,并且 MyWindowControllerMyModel 的实例以及所有其他相关实例都被销毁。

我如何以最 Cocoa 式的方式完成步骤 4?

只是澄清一下:我知道如何使用 NSError 向用户呈现错误。我试图找出处理 awakeFromNib 中的错误的推荐/正确方法是否是显示错误并释放 awakeOnNib 中的所有内容,或者是否有更好的方法方法(这可能需要重组我的应用程序)。

最佳答案

最残酷的 Cocoa 呈现错误的方式是使用 -[NSResponder PresentError:]

如果您发出此消息的对象继承自 NSResponder,您可以使用:

[self presentError:someError];

或者如果没有,你可以使用这个:

[[NSApplication sharedApplication] presentError:someError];

或者:

[NSApp presentError:someError];

还有 -presentError: 的变体,可让您将错误显示为窗口模式表而不是应用程序模式对话框。

所有这些都假设您以某种方式获得了一个 NSError 实例作为 someError 传递。我不熟悉你的模型对象。当您说它“遇到故障”时,这是否意味着您的模型类上的某些方法提供了此错误对象?或者某个其他对象上将模型对象作为参数的方法是否会提供错误?无论哪种情况,提供错误对象的方法都应遵循如下形式:

- (BOOL)myMethodReturningAnErrorByReference:(NSError **)error

- (id)myMethodReturningAnErrorByReference:(NSError **)error

在前一个示例中,该方法返回 YESNO,如果是 NO,则返回 NSError 的实例 应通过引用返回,然后您可以将其呈现。在后一个示例中,您的方法返回对对象的有效引用,或者返回 nil,在 nil 的情况下,再次返回 的实例NSError 应通过引用返回,然后您可以将其呈现。

此外,您可以通过检查其 codedomain 属性来有条件地显示错误。还可以在您的 NSResponder 继承类上重写 -willPresentError: ,您可以在其中自定义演示文稿的内容。

最后,this page Apple 的在线文档中提供了丰富的背景信息。我完全掩盖了用于呈现错误的错误响应程序链,但它已涵盖在那里。

祝你一切顺利。

关于objective-c - 处理 awakeFromNib 中的错误的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18729991/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com