gpt4 book ai didi

objective-c - 导致错误的对象的内存地址,找到哪个对象

转载 作者:行者123 更新时间:2023-11-28 20:36:31 24 4
gpt4 key购买 nike

我的应用程序中出现 _WebThreadLockFromAnyThread 错误。它不会使我的应用程序崩溃(像这样的所有其他错误都会使我的应用程序崩溃)。

我无法追踪有问题的代码行在哪里。

我知道这个错误是在我尝试在辅助线程上更新 UI 时发生的。除了 main 之外,我只使用 1 个线程进行 KVO'ing。我用

进行所有方法调用
[self foo]

错误是:

void _WebThreadLockFromAnyThread(bool), 0xb29ca60: Obtaining the web lock from a thread other than the main thread or the web thread. UIKit should not be called from a secondary thread.

错误在每次执行时都出现在我的日志中的同一位置,它打印在这两个日志条目之间:

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
NSLog(@"observeValueForKeyPath thread%@", [NSThread currentThread]);

if ([keyPath isEqualToString:MAXY])
{
NSLog(@"current tabDictionary:%@", self.tabDictionary);

但是用我的 if stmt 更改 UI 应该没有任何关系,所以我假设它发生在我程序的其他地方。

我可以使用它的内存地址来找出它是哪个对象吗?或者它正在从哪个线程尝试?

最佳答案

我猜测 tabDictionary 包含 UIViewController 的实例,并且您对 NSLog 的调用导致访问 View Controller 的属性以生成正在记录的字符串。这是您在辅助线程上的 UIKit 访问。

observeValueForKeyPath: 被调用时,您无法保证您在哪个线程上。如果这很重要,您应该检查您是否在主线程上,如果不是,请使用 performSelector:onMainThread:dispatch_async 来确保您在。

关于objective-c - 导致错误的对象的内存地址,找到哪个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10288056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com