objective-c - SFAuthorizationPluginView 示例 NameAndPassword 在按下按钮后挂起

标签 objective-c macos authorization osx-elcapitan sfauthorizationpluginview

我正在使用 NameAndPassword 的补丁版本,如下所示:https://github.com/skycocker/NameAndPassword

当在登录窗口之外使用它时(例如 system.login.screensaver 或我自己的测试权),仅使用 NameAndPassword 插件,在按确定或取消后窗口会挂起大约 10 秒。

添加一些日志,我看到 MechanismDestroy 在插件上被调用并且 NameAndPassword 被释放,但它永远不会在 NameAndPassword 中解除分配。我也没有看到 PluginDestroy 被调用。在调用 MechanismDestroy 后,SecurityAgent 会再挂起 10 秒。

我看到了这个相关帖子:SecurityAgentPlugin not working anymore on Yosemite (SFAuthorizationPluginView)

但是遵循已接受的答案是行不通的,根据授权插件引用,不需要调用 didDeactivate(没有调用 RequestInterrupt 并且从不调用 MechanismDeactivate)。调用 SetResult 应该就足够了。

我可以通过从 View 中获取窗口并强行关闭它来破解它,但必须有一种方法让它按预期工作。

最佳答案

我发现了不同的 hack - 我获得了 auth-mechanism 实例的引用计数并释放了除最后一个之外的所有实例。在 setResult 调用之后执行此操作。 这解决了这个问题。不应该是这样的——但 Apple 并没有给我们太多选择。

关于objective-c - SFAuthorizationPluginView 示例 NameAndPassword 在按下按钮后挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37631938/

相关文章:

design-patterns - 在哪里应用域级权限

reactjs - React Native Firebase 验证码

ios - Objective-C : NSNumber from Array to float

ios - 避免在 Objective-C 中滥用单例

objective-c - 什么是任意对象?

python-3.x - 您需要在 brew 切换之前/之后运行 brew unlink/brew link 吗?

ios - prepareForSegue 被调用两次,在演示过程中尝试呈现 <UINavigationController>

objective-c - 当 nib 本地化时,Cocoa 无法加载窗口 nib 文件

macos - Mavericks+ 中的 CGEventTapCreateForPSN(已弃用 GetCurrentProcess)

authorization - 如何在 XACML 中将两个规则合并为一个规则?