我正在尝试调试一个项目,我怀疑在后台线程中调用了 UI 操作。此链接:UIViewController animations stop working描述了如何使用 DTFoundation
代码来检测是否在后台线程中调用了 UI 操作,但我不知道如何集成。我不使用 Pods - 它是另一个应用程序的 XCode
项目。我尝试拖动 DTFoundation.xcodeproj
,将其添加到目标,但我无法让它工作。应用程序构建但库不构建。有什么明智的建议吗?
最佳答案
好的,对于任何希望使用 DTFoundation 来捕获主线程之外的 UIKit 调用的人,方法如下(注意:这仅用于捕获 UIKit 调用 - 不能利用所有其他 DTFoundation 实用程序)。
1) 从这里下载 DTFoundation 代码 https://github.com/Cocoanetics/DTFoundation并将其解压到某处
2) 在 XCode 中,打开您要调试的现有项目,然后将以下 .h 和 .m 文件从解压的 DTFoundation 代码复制到您的项目中: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> });
或任何其他合适的方式
尽情享受吧!这个框架节省了许多小时的困惑
关于ios - 如何_确切地_将 DTFoundation 集成到另一个 iOS 项目中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20915742/