ios - 如何_确切地_将 DTFoundation 集成到另一个 iOS 项目中?

标签 ios

我正在尝试调试一个项目,我怀疑在后台线程中调用了 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/

相关文章:

ios - 实现Xamarin iOS语音转文本

objective-c - Objective-C 消息被发送到地址为 : 0x75d52a0 的已释放对象(僵尸)

ios - 如何在 Swift 中压缩 PNG 文件?

ios - Xcode 5 中 'setDelegate' 的替换

具有自动续订订阅功能的 iOS IAP,同一系列中的多个产品具有相同的持续时间

ios - UITableView 自动布局灵活高度

ios - UIPickerView 动画隐藏和显示失败

ios - 无法在模拟器中运行应用程序 : An error was encountered while running (Domain = LaunchServicesError, 代码 = 0)

ios - CLLocationManagerDelegate 模拟用户拒绝

ios - UICollectionView 重新加载某些部分崩溃