由于 EXC_BAD_ACCESS 崩溃,UIImage 没有改变图像,为啥?
Posted
技术标签:
【中文标题】由于 EXC_BAD_ACCESS 崩溃,UIImage 没有改变图像,为啥?【英文标题】: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 【参考方案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")
【讨论】:
以上是关于由于 EXC_BAD_ACCESS 崩溃,UIImage 没有改变图像,为啥?的主要内容,如果未能解决你的问题,请参考以下文章
UITextFieldDelegate 崩溃 (exc_bad_access)
NSLayoutConstraint VFL 因为 EXC_BAD_ACCESS 而崩溃