在UIWebview中通过UIAlertView收集用户名/密码以进行NTLM挑战

时间:2014-12-25 06:07:47

标签: ios objective-c uiwebview ntlm

我有一个UIWebview,可以将用户重定向到一个返回NTLM质询的安全页面。我正在尝试实现一个UIAlertView,它在willSendRequestForAuthenticationChallenge委托调用中以阻塞模式启动。我打算要求用户在UIAlertView中提供其凭据,然后使用它们来回答NSURLAuthenticationChallenge。首先,我看到UIAlertView不是模态的。如果是,那么我认为一切都会奏效。但现在它没有,是否还有其他解决方案呢?

1 个答案:

答案 0 :(得分:0)

您可能从桌面应用程序编程中获得了阻止模式对话框的概念。它可能存在,因为键盘和鼠标具有不同的事件源。但是在iOS上,几乎所有事件都通过主线程事件循环进行路由。最重要的是,GUI渲染和触摸事件。因此,如果可以使用阻塞模式对话框,则显示它将停止主线程事件循环并且应用程序将停止。触摸事件不会被拾取。因此,iOS设计中无法使用阻止模式对话框。这同样适用于Android。

所以习惯异步编程。你永远不会阻止执行。您实现委托,编写回调处理程序和事件侦听器。在此特定情况下,实施UIAlertViewDelegate并在用户单击按钮时调用[challenge sender]委托的方法。在您执行此操作之前,身份验证NSURLConnection不会继续。

或者使用UIAlertController,自iOS8以来它优先于UIAlertView,使用处理程序块的方式更简单。理解块(或一般的闭包)超出了这个答案的范围。