我有一个应用程序,其 UI 元素包括NSStatusItem
和菜单。在我的应用程序中,我正在使用NSTask
异步执行一些操作,我正在使用使用获得的输出NSFileHandleReadCompletionNotification
更新菜单。但现在每当我单击并打开菜单时,主运行循环就会进入NSEventTrackingRunLoopMode
并且通知发布失败。所以基本上在我的菜单打开的情况下,主线程上不会发生任何操作。现在我发现了类似的问题this发布但那里接受的解决方案似乎没有帮助。我的理解是为了NSNotificationCenter
, the NSRunloopDefaultMode
不得被阻止。有什么办法可以改变这种行为吗???有人可以帮忙吗???
我猜你有一个NSFileHandle
代表的是NSTask
's stdout
,并且您已经要求它-readInBackgroundAndNotify.
正如您所发现的,这样做的问题是,这只在运行循环处于默认模式时发出通知。如果运行循环进入另一种模式(例如打开菜单时),那么您的通知将在主运行循环上排队,并等待运行循环重新进入默认模式。
你想用的是-readInBackgroundAndNotifyForModes:方法,您将向其传递一个包含两者的数组NSDefaultRunLoopMode
and NSEventTrackingRunLoopMode
。这将向运行循环表明,当运行循环处于默认模式或事件跟踪模式时,您希望收到任何可用数据的通知。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)