如何解决由于NSUserDefaultsDidChangeNotification,UI在后台线程上更改
|| 我正在调试一个问题,该问题有时会导致我的应用程序崩溃,并在崩溃报告中显示“ 0”消息。似乎应用崩溃了,因为正在后台线程上发送和接收ѭ1。我在收到通知时进行UI更改,并且强烈建议不要在后台线程上进行UI更改。 如果有时(如果不是总是)在后台线程上发送“ 1”,那么处理此问题的最佳方法是什么?类似于以下内容的内容似乎过分,但可能是必需的。[[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的Grand Central Dispatch文档
-戴夫
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。