我在最后列出了一个非常简单的视图控制器。
目前该行titleLabel.text = alertTitle
导致这种情况发生的原因是,是因为titleLabel上的弱引用?
class AlertViewController: UIViewController {
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var cosmosStarRating: CosmosView!
@IBOutlet weak var alertLabel: UILabel!
var alertText = ""
var alertTitle = ""
var showStars = false
var appear: () -> () = {}
var disappear: () -> () = {}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
titleLabel.text = alertTitle
alertLabel.text = alertText
if (!showStars) {
cosmosStarRating.removeFromSuperview()
}
appear()
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
disappear()
}
}
答案 0 :(得分:1)
首先应该包含符号化的崩溃报告。
但试试这个:
在AppDelegate
文件中,删除(或注释掉)顶部显示的行:
@UIApplicationMain
然后使用以下代码将main.swift
文件添加到项目中:
import UIKit
UIApplicationMain(CommandLine.argc, UnsafeMutableRawPointer(CommandLine.unsafeArgv).bindMemory(to: UnsafeMutablePointer<Int8>.self, capacity: Int(CommandLine.argc)), nil, NSStringFromClass(AppDelegate.self)) // Rename AppDelegate.self as required
我知道这可能听起来很疯狂,但它只是解决了一次与你的撞击完全相同的情况,因为我在战斗了几个星期。我收到了数百份不同版本的崩溃报告(使用TestFlight的beta测试人员),他们都指向同一个ViewController文件,并且同一行。这条线正在做什么并不重要。我重新安排了改变命令的命令,我甚至在某一点上评论了整个班级!相同的崩溃报告,相同的文件,同一行。
我交换使用上面的main.swift
文件而不是自动生成的文件,瞧,崩溃报告开始有意义,指向UIApplicationMain()
行,因为崩溃发生在其中一个Apple的框架(这是我的错误,但崩溃没有出现在我的代码中,它在Apple触发崩溃之前就上升了)。但是只有在切换到main.swift
代码之后我才能解决这个问题。我猜在使用@UIApplicationMain
方法时,符号化中存在一些错误。
答案 1 :(得分:0)
听起来viewcontroller
titleLabel
实例在调用ViewWillappear
方法后正在初始化。并且您正在尝试访问内部ViewWillappear
方法,并且如果它是nil则强制解包,那么如果尝试访问它将崩溃。您可以尝试这样宣布您的插座可选
@IBOutlet weak var titleLabel: UILabel?
或在ViewDidAppear方法中移动代码以防止崩溃。