如何从辅助线程中找到对UIKit实例的调用?

joh*_*ieb 7 cocoa-touch objective-c ios xcode4 ios5

我的应用程序在iOS 5中崩溃,因为我有一些代码从辅助线程调用UIKit实例.当您看到以下错误时,您知道有这个问题:

bool _WebTryThreadLock(bool),0x811bf20:不允许在网络线程上进行多次锁定!请提交一个错误.现在崩溃......

所以我的问题是,我可以通过哪些方法找到从辅助线程调用UIKit实例的代码?

以下是我已经尝试过的一些事情:

  1. 注释掉可能违反规则的块
  2. assert([NSThread isMainThread])在可能在辅助线程中处理的位置添加
  3. 添加了符号断点 _WebTryThreadLock

这些东西帮助我找到了问题所在.但是,在我的最终崩溃中,_WebTryThreadLock断点在任何其他线程中都没有堆栈跟踪.那么,如何在没有堆栈跟踪的情况下找到导致问题的代码?

谢谢你的时间!

Rob*_*ier 3

assert()可能是这方面最有价值的工具。众所周知,我在控制器类中的每个方法的开头都放置了类似的断言。如果找不到,我会将断言添加到我的视图类中。如果找不到它,我会将其添加到我认为仅主线程的任何模型类中。

对于 @craig 的评论,它声称是内部错误的事实可能是准确的。但我认为您首先仔细检查自己的代码是正确的。