【问题标题】:Window controller Delegate error窗口控制器委托错误
【发布时间】:2014-07-16 06:32:52
【问题描述】:

我使用此代码在模式视图中显示窗口控制器窗口。我在窗口控制器中有针对窗口中按钮的操作。当我单击按钮时,应用程序崩溃并且没有收到错误消息。我设置代表错了吗?

[[NSApplication sharedApplication] beginSheet:windowObj.window modalForWindow:self.view.window modalDelegate:windowObj didEndSelector:nil contextInfo:nil];

【问题讨论】:

  • 添加异常断点并重试。我们需要一个堆栈跟踪来帮助...
  • 我试过了。我没有得到任何异常,它停止在'return NSApplicationMain(argc, (const char **)argv);'符合 EXC_BAD_ACCESS (code=EXC_1386_GPFLT)
  • 您应该能够捕获该异常的根本原因...
  • 我认为我们可以使用更多与 windowObjview 的存在相关的代码
  • @trojanfoe 不,我不能。这是无法修复的主要问题。

标签: objective-c cocoa delegates nswindowcontroller modal-window


【解决方案1】:

windowObj 在工作表可以显示窗口之前被释放(如果您正在使用它,可能是由 ARC)。您应该为您使用的任何类添加一个强大的属性,并将 windowObj 设置为它,如下所示:

@property (strong) MyWindowController *windowObj;
...
// Instantiate the window controller
self.windowObj = [[windowController alloc] initWithWindowNibName:@"windowController"];
[[NSApplication sharedApplication] beginSheet:windowObj.window modalForWindow:self.view.window modalDelegate:windowObj didEndSelector:nil contextInfo:nil]; 

【讨论】:

  • 问题是 windowObj 正在被释放。不需要[self.windowObj loadWindow]; 我添加了强大的属性并且它正在工作。谢谢。
  • Usinf [self.windowObj loadWindow]; 拦截窗口委托,这会导致另一个问题。从这个角度来看,最好避免这样的编码。
猜你喜欢
  • 1970-01-01
  • 2015-04-22
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多