iphone – 此应用程序正在从后台线程修改自动布局引擎,这可能导致引擎损坏和奇怪的崩溃

我得到这个日志在控制台,当我运行我的应用程序在模拟器。在iOS 8中没有看到这个。我不太确定造成这种情况的原因。有没有人遇到同样的问题,如果是如何是如何修复?或有任何人可以提供有关这方面的任何帮助?
不要改变UI从任何东西,但主线程。虽然它可能似乎在一些操作系统或设备上工作,而不是其他人,它必然使您的应用程序不稳定,并不可预测的崩溃。

如果你必须响应一个通知,这可能发生在后台,然后确保UIKit调用发生在主线程。

你至少有这两个选项:

异步调度

如果你的观察者可以在任何线程被通知,使用GCD(大中央调度)。你可以从任何线程监听和做工作,并在dispatch_async中封装UI更改:

dispatch_async(dispatch_get_main_queue()) {
    // Do UI stuff here
}

何时使用GCD?当您不控制发送通知的人时。它可以是操作系统,Cocoapod,嵌入式库等。使用GCD将随时,每次都会醒来。下行:你发现自己重新安排工作。

在主线听

方便地,您可以使用queue参数指定您希望在注册通知时通知观察者的线程:

addObserverForName:@"notification"
    object:nil
    queue:[NSOperationQueue mainQueue]
    usingBlock:^(NSNotification *note){
        // Do UI stuff here
    }

什么时候在主线程上观察?当您同时注册和注册时。你回应通知的时间,你已经在你需要的地方。

在主线程上发布通知

[self performSelectorOnMainThread:@selector(postNotification:) withObject:notification waitUntilDone:NO];

混合解决方案不保证观察者只从所述方法调用。它允许更轻的观察者,成本较低的设计。这里只提到一个解决方案,你应该避免。

http://stackoverflow.com/questions/31951704/this-application-is-modifying-the-autolayout-engine-from-a-background-thread-wh

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:iphone – 此应用程序正在从后台线程修改自动布局引擎,这可能导致引擎损坏和奇怪的崩溃