UIImagepicker不走代理的解决方法

时间:2024-03-31 16:48:33

症状:

一个页面弹出一个actionsheet,我在这里的action的block中present到拍照和选相片页面,操作后没走回调方法。无法进行后续步骤

原因分析:

我在这actionsheet中present的时候,这些代码不是写在viewcontroller中的,整个imagepickercontrol我写到了一个类里,不光本类用其他的也可以用。然后将那个类在action的handleblock中实例化,进行present。

这里涉及到了block,截图看下代码:

UIImagepicker不走代理的解决方法


我们知道 block内部代码是异步执行的,不一定什么时候执行,这就有一个问题,在第一个action的block内实例化的help对象,可能在block要执行的时候已经被释放掉了。导致程序无法进行imagepicker的代理操作。这就需要block要对内部的对象进行强引用,不让他释放。那么怎么做呢?看我截图可知,我把这个help声明成了viewcontroller的一个属性。这样help就和self是一个生命周期了。block在引用的时候不会找不到help对象。可以执行imagepickercontrol的代理方法

解决方法:把block内部实例化的对象声明成一个属性即可。

其实就是循环引用的延伸。