![](/img/trans.png)
[英]iOS Swift Error: Execution was interrupted, reason : signal SIGABRT
[英]Swift Playground error: Execution was interrupted, reason: signal SIGABRT
如何甚至調試這個錯誤? 似乎沒有額外的錯誤描述。
失敗的代碼:
import UIKit
import PlaygroundSupport
let containerView = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
containerView.backgroundColor = UIColor.white
let stackView = UIStackView()
stackView.translatesAutoresizingMaskIntoConstraints = false
containerView.addSubview(stackView)
stackView.addConstraint(.init(item: stackView, attribute: .top, relatedBy: .equal, toItem: containerView, attribute: .top, multiplier: 1, constant: 0))
stackView.addConstraint(.init(item: stackView, attribute: .leading, relatedBy: .equal, toItem: containerView, attribute: .leading, multiplier: 1, constant: 0))
PlaygroundPage.current.liveView = containerView // error: Execution was interrupted, reason: signal SIGABRT.
完整錯誤:
錯誤:執行被中斷,原因:信號 SIGABRT。 進程一直停留在被中斷的地方,使用“線程返回-x”返回到表達式求值前的狀態。
完整的控制台日志:
libc++abi.dylib:以未捕獲的 NSException 類型異常終止
問題是您將約束添加到stackView
而不是containerView
。
要添加到視圖的約束。 約束只能引用視圖本身或其子視圖。
containerView
是stackView
的超級視圖,而不是子視圖。
如果您更改代碼以將約束添加到containerView
,它將運行
containerView.addConstraint(.init(item: stackView, attribute: .top, relatedBy: .equal, toItem: containerView, attribute: .top, multiplier: 1, constant: 0))
containerView.addConstraint(.init(item: stackView, attribute: .leading, relatedBy: .equal, toItem: containerView, attribute: .leading, multiplier: 1, constant: 0))
您可能希望添加尾隨和底部約束,以便堆棧視圖填充整個容器視圖。 當然,您還需要添加一個arrangedSubview
的子視圖,以便堆棧視圖中實際上有一些內容。
通過引用布局指南而不是這種舊的、更冗長的方法來添加約束通常更簡單:
import UIKit
import PlaygroundSupport
let containerView = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
containerView.backgroundColor = UIColor.white
let stackView = UIStackView()
stackView.translatesAutoresizingMaskIntoConstraints = false
containerView.addSubview(stackView)
stackView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor).isActive = true
stackView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor).isActive = true
stackView.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true
stackView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor).isActive = true
let label = UILabel()
label.text = "Hello world"
label.textColor = .black
stackView.addArrangedSubview(label)
PlaygroundPage.current.liveView = containerView
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.