自定义模态对话框和背景操作
-
26-10-2019 - |
题
我有一个可可应用程序,其中包含一个自定义的多步帐户设置,我将其作为带有一组视图的自定义模态对话框实现。
问题在于背景操作(获取URL)似乎被卡住了。我认为这是因为应用程序处于模式模式。
在这里,代码启动模式对话框:
[NSApp beginSheet:accountSetupController.window modalForWindow:self.window
modalDelegate:nil didEndSelector:NULL contextInfo:NULL];
[accountSetupController beginAccountSetup]; // this later launches the background operation
[NSApp runModalForWindow:accountSetupController.window];
NSApp endSheet:accountSetupController.window];
首先,我的假设正确吗?即使应用程序正在运行模式,有没有办法进行背景操作?
实际的背景操作不受我的控制。这是一个需要完成块的外部API。
解决方案
查看您致电的“讨论”部分 [NSApplication beginSheet: modalForWindow: ...]
:
讨论
此方法同步运行指定表的模态事件循环。它显示表格,使其保持关键,启动跑步循环,并为其处理事件。 当应用程序在运行循环中时,除非与工作表相关联,否则它不会响应其他任何事件(包括鼠标,键盘或窗口粘液事件)。它还没有执行与模态跑步循环无关的任何任务(例如射击计时器)。换句话说,此方法仅消耗足够的CPU时间来处理事件并将其分配到与模态窗口相关的操作方法。
对我来说,这意味着在此模态会话进行时,背景线程和任务未运行。我以前遇到了这个问题,我自己的模态对话框试图访问Web服务器(如果我没记错的话,出于注册目的)。
最好的解决方案是,如果您需要异步与服务器通信,则不要使用模态对话框。如果您必须使用模态对话框,请尝试在模态纸之间进行通信(即,当用户命中“提交”时,结束工作表并进行服务器聊天,然后提出下一步的下一张表)。
不隶属于 StackOverflow