相关疑难解决方法(0)

iOS9 - 此应用程序正在从后台线程修改autolayout引擎 - 在哪里?

对于搜索,错误消息是:

此应用程序正在从后台线程修改autolayout引擎,这可能导致引擎损坏和奇怪的崩溃.这将在将来的版本中导致异常.

我知道这意味着从后台线程调用一些UIKit代码,我知道解决方案是将代码包装进去

dispatch_async(dispatch_get_main_queue(), ^(void){ <code> });

我的问题是找到这样做的地方,因为没有任何打印的堆栈跟踪引用我的应用程序代码.我证明这是否定的证据是在调试输出窗口中搜索(命令-f)我的应用程序的名称; 我有24个堆栈跟踪被丢弃,我的应用程序名称不在其中任何一个,除了顶部有错误消息.我可以发布其中一个,但这似乎没有用.

在我今天工作的情况下,在转换视图控制器viewWillDisappear()之前和之后都会发生这种情况viewWillAppear().我发现我的部分代码要包装dispatch_async(),但现在都处理完了.我有断点和调试消息,其中分配和取消分配与视图控制器相关的对象,并且它们都在异常消息出现后触发.在调试和发布模式下,模拟器和我的iOS9 iPhone都会发生这种情况.

如何识别显然修改UI的后台代码?

objective-c ios xcode7

37
推荐指数
1
解决办法
3万
查看次数

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

当我在模拟器中运行我的应用程序时,我在控制台中获取此日志.在iOS 8中没有看到这个.我不太清楚是什么导致了这一点.有没有其他人遇到同样的问题,如果是这样,它是如何解决的?或者是否有人可以提供任何帮助?

iphone ios9 xcode7-beta4

36
推荐指数
3
解决办法
4万
查看次数

此应用程序正在从后台线程修改autolayout引擎,这可能导致引擎损坏

我收到此错误此应用程序正在从后台线程修改autolayout引擎,这可能导致引擎损坏和奇怪的崩溃.这将导致未来版本中的异常.我不知道是什么导致了这个错误.有谁能够帮我.

func getUserDataFromTwitterWithUser(user : PFUser)
 {
//NRLoader.showLoader()
let strTwURL = "https://api.twitter.com/1.1/users/show.json?     screen_name="+PFTwitterUtils.twitter()!.screenName! + "&access_token="+PFTwitterUtils.twitter()!.authToken!
let twURL = NSURL (string: strTwURL)

let request = NSMutableURLRequest(URL: twURL!, cachePolicy: NSURLRequestCachePolicy.UseProtocolCachePolicy, timeoutInterval: 2.0) as NSMutableURLRequest

PFTwitterUtils.twitter()?.signRequest(request)

let session = NSURLSession.sharedSession()

session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in
  if error == nil {
    var  jsonOptional = Dictionary<String, AnyObject>()

    do {
      jsonOptional = try NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions.MutableContainers ) as! Dictionary<String, AnyObject>
      // use jsonData
    } catch {
      // report error
    }
    var userName = ""
    if …
Run Code Online (Sandbox Code Playgroud)

xcode multithreading swift

14
推荐指数
3
解决办法
2万
查看次数

为什么我在使用UIWebView时收到"此应用程序正在从后台线程修改自动布局引擎"?

我有一个问题使用UIWebView.

UIWebView扩展到全屏模式时,我一直收到以下信息:

此应用程序正在从后台线程修改autolayout引擎,这可能导致引擎损坏和奇怪的崩溃.这将在将来的版本中导致异常.

这是我的简单代码,也是我唯一的代码:

@IBOutlet var player: UIWebView!

override func viewDidLoad()
{
    super.viewDidLoad()

    let url = "http://qthttp.apple.com.edgesuite.net/1010qwoeiuryfg/sl.m3u8"

    let frame: Int = 10

    let html = "<html><body><iframe src=\"\(url)\" width=395 height=290 frameborder=\(frame)></iframe></body></html>"

    player.loadHTMLString(html as String, baseURL: nil)
}
Run Code Online (Sandbox Code Playgroud)

我尝试了以下问题的解决方案,它没有做任何事情:

  1. 获取"此应用程序正在修改自动布局引擎"错误?
  2. 此应用程序正在从后台线程修改autolayout引擎,这可能导致引擎损坏和奇怪的崩溃
  3. 此应用程序正在从后台线程修改autolayout引擎 - ios9
  4. 从C++修改后台线程错误中的autolayout引擎
  5. 此应用程序正在从后台线程swift2.0修改autolayout引擎
  6. "此应用程序正在从后台线程修改autolayout引擎,这可能导致引擎损坏和奇怪的崩溃......"
  7. Xcode7:此应用程序正在从后台线程修改autolayout引擎,这可能导致引擎损坏和奇怪的崩溃
  8. dispatch_async(dispatch_get_main_queue(), {
        let html = "<html><body><iframe src=\"\(url)\" width=395 height=290 frameborder=\(frame)></iframe></body></html>"
        self.player.loadHTMLString(html as String, baseURL: nil)
    })
    
    Run Code Online (Sandbox Code Playgroud)

我试过另一个解决方案

  1. iOS9 - 此应用程序正在从后台线程修改autolayout引擎 - 在哪里?

将PSPDFUIKitMainThreadGuard添加到项目中无法解决此问题.

正如您所看到的,我的代码非常简单,与我发现的其他问题不同,所有这些解决方案都指向在主线程中执行UI更改,我添加了代码以尝试执行,但我仍然收到警告.

还有很多我发现的与我相似的问题,但它们都指向同样的解决方案,这对我不起作用,所以我没有费心去列出它们.

有没有人对此有任何见解?你可以自己尝试这个简单的代码,你会看到同样的问题.

谢谢

uiwebview ios swift

7
推荐指数
0
解决办法
755
查看次数

如何解决:此应用程序正在从后台线程修改autolayout引擎

当代码的某些部分正在从主线程以外的其他线程更改UI项时,会将此错误记录到控制台.但是我怎样才能找到它的位置呢?

xcode background ios autolayout ios-autolayout

5
推荐指数
1
解决办法
250
查看次数

"此应用程序正在修改自动布局引擎"错误(Swift iOS)

我很难搞清楚如何修复"此应用程序正在从后台线程修改自动布局引擎"错误.任何帮助是极大的赞赏.

我尝试使用这个类似问题概述的方法来使用dispatch_async(dispatch_get_main_qeueu()),但它没有解决问题.我使用不正确吗?

从调试开始,我已经发现Firebase调用重置用户密码至少是问题的一部分.当我遗漏该代码时,没有错误.

相关代码和完整错误消息如下:

    //MARK: - Forgot Password Button Tapped
    @IBAction func forgotPasswordButtonTapped(sender: AnyObject) {

    let userEnteredEmail = emailTextField.text

    //Have Firebase send email to reset password      
        dispatch_async(dispatch_get_main_queue(), {

        FIRAuth.auth()?.sendPasswordResetWithEmail(userEnteredEmail!, completion: { error in

            if error != nil {

                //Tell user that the user name or password is incorrect.
                let errorCode = error!.code

                switch (errorCode) {
                    // Error code handling alerting user to issue.
                    }
            }
            else {
                //Send user to the forgot password screen.
                self.performSegueWithIdentifier("toForgotPasswordViewController", sender: self)
            } …
Run Code Online (Sandbox Code Playgroud)

ios firebase dispatch-async swift firebase-authentication

3
推荐指数
1
解决办法
5477
查看次数

为什么从后台线程更新 UI 需要这么长时间?

我知道所有 UI 更新都必须从主线程完成。

但纯粹是为了更深入地了解 GCD 和 dispatch main 是如何工作的:

我有一个运行网络调用的按钮,我最终在它的 completionHandler 中执行以下操作:

self.layer.borderColor = UIColor(red: 255/255.0, green: 59/255.0, blue: 48/255.0, alpha: 1.0).cgColor
self.layer.borderWidth = 3.0
Run Code Online (Sandbox Code Playgroud)

发生颜色变化需要 6-7 秒。显然,如果从主线程运行上面的代码,它会立即改变边框颜色。

问题 1即使我没有任何其他代码可以运行,为什么 UI 更改不会立即从后台线程发生?还在等什么?

有趣的是,如果我点击按钮进行网络调用,然后点击textField 本身(在 6-7 秒之前),边框颜色会立即改变。

发生这种情况是因为:

从后台线程我已经更新了模型,即更改将要更新的 UI/视图排队的 textField 颜色……但是由于我们在后台队列中,因此更新 UI 可能需要几秒钟的时间

但随后我立即点击了 textField 并强制超级快速读取 textField 及其所有属性,包括边框 - 从主线程(实际用户触摸始终通过主线程处理)......即使还没有屏幕上显示为红色,但由于模型上显示为红色,因此它将从中读取并立即将颜色更改为红色。

问题 2:这种观察是否正确?

如果我不点击并等待:

在此处输入图片说明

如果我点击:

在此处输入图片说明


我的完整代码如下:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var textField: UITextField!

    @IBAction func isValid(_ sender: Any) {

        let userEmail = textField.text …
Run Code Online (Sandbox Code Playgroud)

grand-central-dispatch ios dispatch-async swift

3
推荐指数
1
解决办法
1320
查看次数

app从后台线程修改autolayout引擎

我几乎完成了将我的iOS应用程序迁移到Swift 3.0.但我仍然有一些类似于下面的情况.其中大部分我都能通过将有问题的代码放在主线程上来解决.

在其他一些情况下,我无法弄清楚,我的代码的哪一部分正在错误的线程上执行.我收到这样的消息:

This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes.
 Stack:(
    0   CoreFoundation                      0x000000018765a1d8 <redacted> + 148
    1   libobjc.A.dylib                     0x000000018609455c objc_exception_throw + 56
    2   CoreFoundation                      0x000000018765a108 <redacted> + 0
    3   Foundation                          0x0000000188241ea4 <redacted> + 192
    ....................
    16  libsystem_pthread.dylib             0x00000001866eece4 <redacted> + 200
    17  libsystem_pthread.dylib             0x00000001866ee378 pthread_mutex_lock + 0
    18  libsystem_pthread.dylib             0x00000001866edda4 start_wqthread + 4
)
Run Code Online (Sandbox Code Playgroud)

是否有一些特殊的技术(使用调试器时的选项或??)我可以用来跟踪progran所遵循的路径,看看这发生了什么?

multithreading dispatch task-queue ios swift

0
推荐指数
1
解决办法
1514
查看次数