我正在调试一个问题,该问题有时会导致我的应用程序崩溃,并在崩溃报告中显示WebTryThreadLock
消息。好像该应用程序崩溃了,因为在后台线程上发送和接收了NSUserDefaultsDidChangeNotification
。我在收到通知时进行UI更改,并且强烈建议不要在后台线程上进行UI更改。
如果NSUserDefaultsDidChangeNotification
有时(如果不是总是)在后台线程上发送,那么处理此问题的最佳方法是什么?类似于以下内容的内容似乎过分,但可能有必要。
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(userDefaultsDidChange)
name:NSUserDefaultsDidChangeNotification
object:nil];
- (void)userDefaultsDidChange {
[self performSelectorOnMainThread:@selector(updateUIWithNewUserDefaults)
withObject:nil
waitUntilDone:NO];
}
- (void)updateUIWithNewUserDefaults {
// Update UI
}
最佳答案
您应该将消息发送到UI线程的调度队列,然后从那里进行UI修改。
像这样:
dispatch_async(dispatch_get_main_queue(), ^{
// your code here
});
参见Apple's Grand Central Dispatch documentation
-戴夫
关于ios - 由于NSUserDefaultsDidChangeNotification,UI在后台线程上发生了变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5682554/