关于ALert的线程同步问题

需要hook一个返回值为BOOL类型方法,希望达到的效果是:根据用户在UIALertController上点击不同的按钮,改变方法的返回值。
下面是我的代码:


####出现的问题是,这个方法不等待第12行或者第15行的用户点击事件,就直接执行后面21行的if语句了。所以不管用户点哪个按钮,执行的都是第25行的“return NO;”。
后来试了一下用GCD线程同步,改成如下代码(添加了有/----- GCD Sync -----/注释的代码):

但是这样还是没有解决问题,程序执行和没有改之前一样。
请教一下,有什么办法可以让这个方法等用户点击之后才返回呢?谢谢各位~

很典型的问题,你的需求,本质是在一个新线程block里return,应该是没有解决方案的。
但是,可以换一种思路:
[AVCaptureDeviceInput _authorizedToUserDevice:]得到调用时,应该是修改了配置文件的某个字段,且刷新了内存,即[AVCaptureDeviceInput _authorizedToUserDevice:]的下一层实现。继续逆向到这一层级,找到函数修改的配置文件,以及它是如何刷新内存的。在你的UIAlertController点击事件里复用这部分代码,即实现[AVCaptureDeviceInput _authorizedToUserDevice:]的功能,就可以达到你的目的了。

卡住好久终于有了新思路,谢谢:blush: