【问题标题】:UIImage not changing image because of EXC_BAD_ACCESS crash, why?由于 EXC_BAD_ACCESS 崩溃,UIImage 没有改变图像,为什么?
【发布时间】:2020-11-06 03:51:38
【问题描述】:

我有这个条件导致 UIImageView 被改变,这取决于一个创造的“翻转”(Int.rand(0...1)的哪一侧。我不确定它为什么像以前一样在这个特定的位置崩溃程序到了这一点,它可以用另一个图像资产更改完全相同的 UIImageView。我想要将其更改为的图像资产确实存在于资产文件夹中。只是令人困惑为什么它会在这个特定实例中崩溃。

func changeField(coin: Int){
    lowerField.isUserInteractionEnabled = false
    upperField.isUserInteractionEnabled = false
    firstP1.isHidden = true
    firstP2.isHidden = true
    
    if coin == 0{
        lowerField.image = UIImage(named: "Red_Attacker")
        upperField.image = UIImage(named: "Blue_Defender")
        
        if userSettings.float(forKey: "Timer_Slider") == 0{
            gameP1()
        }else{
            startTimer(slider_Value: userSettings.float(forKey: "Timer_Slider"), coin: coin)
        }
    }else{
        lowerField.image = UIImage(named: "Blue_Defender")
        upperField.image = UIImage(named: "Red_Attacker")
        
        if userSettings.float(forKey: "Timer_Slider") == 0{
            gameP2()
        }else{
            startTimer(slider_Value: userSettings.float(forKey: "Timer_Slider"), coin: coin)
        }
    }
}

this shows where it specifically throws the exception

有人知道为什么它会在这个地方崩溃吗?非常感谢您的帮助!

【问题讨论】:

  • 也许您正在尝试更新不在主线程上的 UI?
  • 主线程是什么?是线程 1 吗?错误发生在线程 1

标签: ios swift xcode uiimageview


【解决方案1】:

首先确保您有一张同名的图片 第二件事尝试将其放入 dispatchQueue:

DispatchQueue.main.async {
                lowerField.image = UIImage(named: "Red_Attacker")
                upperField.image = UIImage(named: "Blue_Defender")
            }

DispatchQueue.main.async {
        lowerField.image = UIImage(named: "Blue_Defender")
        upperField.image = UIImage(named: "Red_Attacker")
}

【讨论】:

    猜你喜欢
    • 2018-11-25
    • 1970-01-01
    • 2017-06-21
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 2010-10-14
    相关资源
    最近更新 更多