今天在检测相册(photo+camera)这部分的bug时,发现在长按(long press)照片、录像或点击拍照的图标之后,再返回原来的view(assetTableViewController),该view会显示 错误,会显示一片空白。
下面现总结我的工作思路和debugging的步骤:
1. 设断点;在返回的view controller的viewwillappear和viewwilllayoutsubviews这两处设置断点以查看该view的frame大小
2. 重现bug:长按照片或录像等,当进入该view时在两个端点处看到该view的frame变化了!!
具体是:会进入viewwilllayoutsubviews函数3次,并在第二次和第三次被改变了,y变成了0.
3. 跟踪代码并大胆猜测:发现这些返回的操作都同时先后调用了presentViewControllerhe dismissViewController(这个是难点和关键)
在网上试图找解决方案,未果!之后通过在每个函数之后添加自己之前写的一个webbrowserviewcontroller来进行检测,即将presentviewController这段代码换成webbrowserviewcontroller,然后返回,惊奇地发现没问题了。
4. 尝试解决:presentViewController 是UIViewController的方法,它的实现我们没法改变,所以只能从自己的代码下手。首先该view嵌套在另一个view里面,所以尝试用
一个containerVC = [UIApplication sharedApplication].keyWindow.rootViewController来进行present和dismiss。实验之后发现正确!
虽然问题解决了,但是还是不知其所以然,希望看官们能参与讨论并提出建议~~