我正在尝试调试一个项目,我怀疑在后台线程中调用了UI操作。此链接:UIViewController animations stop working描述了如何使用DTFoundation
代码来检测后台线程中是否调用了UI操作,但我无法弄清楚如何集成。我不使用Pods - 它是另一个应用程序的XCode
项目。我尝试拖动DTFoundation.xcodeproj
,将其添加到目标但我无法让它工作。应用程序构建但库不会。任何圣人的建议?
答案 0 :(得分:3)
好的,对于任何想要使用DTFoundation来捕获主线程之外的UIKit调用的人,这里是如何(注意:这仅用于捕获UIKit调用 - 不利用所有其他DTFoundation实用程序)。
1)从这里下载DTFoundation代码https://github.com/Cocoanetics/DTFoundation并将其解压缩到某处
2)在XCode中,打开要调试的现有项目,然后从解压缩的DTFoundation代码中将以下.h和.m文件复制到项目中:UIView + DTDebug,DTLog,DTObjectBlockExecutor,NSObject + DTRunTime (这是8个文件 - 上面的每个名字都有相应的.h和.m)
3)现在转到项目中的AppDelegate.mm文件并在didFinishLaunchingWithOptions函数中添加
[UIView toggleViewMainThreadChecking];
4)接下来,在UIView + DTDebug.m中设置一个断点 -
(void)methodCalledNotFromMainThread:(NSString *)methodName
现在您将全部设置为运行主代码,并且只要在主线程外部调用UI操作,您的代码就会在此时中断。现在您需要做的就是查看堆栈跟踪 - 您自己的项目代码中的第一个函数(通常是跟踪中的几行)是违规代码。把它裹在里面
dispatch_async(dispatch_get_main_queue(), ^{ <Offending UI code goes here> });
或任何其他适当的方式
享受!这个框架可以节省数小时的流量