gpt4 book ai didi

ios - @IBDesignables - "the agent crashed"但应用程序仍然有效(大部分时间)

转载 作者:可可西里 更新时间:2023-10-31 23:57:50 25 4
gpt4 key购买 nike

我在一个项目中遇到了一个非常奇怪的问题。 XCode 一直给我红色错误,并说我的 IBDesignables 有问题。但是错误消息每次都不同,而且总是受到影响的另一个 View Controller 。我不知道如何找到问题的原因。我创建的所有 IBDesignables 似乎都是随机发生的。

该应用程序仍然有效。虽然,有时它无法正确呈现某些 View (我有带有自定义绘制 mask 的 View )。它很少发生,但确实发生了。

这些是我得到的错误:

"Failed to update the auto layout status: The agent crashed"

"Failed to render and update the auto layout status for {randomly chosen VC name}: The agent crashed"

后者在我点击后立即消失。有时,当我进入 Storyboard时,所有的错误都会消失。当我打开任何其他文件时,我会收到多个红色错误(有时是 3 个,有时是 6 个或更多)。

我检查了崩溃日志。他们每个人都说:

fatal error: unexpectedly found nil while unwrapping an Optional value

我不确定这是什么意思。

我尝试清理项目并重新启动 XCode。此外,我还实现了所有 init 方法。

下面的代码是一个,它(几乎)总是我得到的错误的一部分。此外,自定义绘制的 View 有时无法正确呈现:

import UIKit

struct TriangleViewLabelDefault {
static let triangleWidth: CGFloat = 20
static let triangleHeight: CGFloat = 10
}

@IBDesignable
class TriangleView: UIView {
let DEFAULT_TRIANGLE_WIDTH: CGFloat = 30
let DEFAULT_TRIAGNLE_HEIGHT: CGFloat = 20


struct Triangle {
static var width: CGFloat = TriangleViewLabelDefault.triangleWidth
static var height: CGFloat = TriangleViewLabelDefault.triangleHeight
static var midXPosition: CGFloat = 0
}

@IBInspectable var triangleWidth: CGFloat = TriangleViewLabelDefault.triangleWidth {
didSet {
Triangle.width = triangleWidth
}
}

@IBInspectable var triangleHeight: CGFloat = TriangleViewLabelDefault.triangleHeight {
didSet {
Triangle.height = triangleHeight
}
}

@IBInspectable var relativePosition: Bool = true {
didSet {
setNeedsDisplay()
}
}

@IBInspectable var triangleMidXOffset: CGFloat = 0 {
didSet {
setNeedsDisplay()
}
}

@IBInspectable var decoration: Bool = true {
didSet {
setNeedsDisplay()
}
}

@IBInspectable var lines: Int = 20 {
didSet {
setNeedsDisplay()
}
}

override init(frame: CGRect) {
super.init(frame: frame)
}

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}

override func draw(_ rect: CGRect) {
super.draw(rect)
calcTriangleMidXPosition()
addLines()
if decoration {
addDecoration()
}

let maskLayer = CAShapeLayer()
maskLayer.frame = bounds

let maskPath = UIBezierPath()
maskPath.move(to: CGPoint(x: 0, y: Triangle.height))
/* Triangle */
maskPath.addLine(to: CGPoint(x: Triangle.midXPosition - Triangle.width, y: Triangle.height))
maskPath.addLine(to: CGPoint(x: Triangle.midXPosition, y: 0))
maskPath.addLine(to: CGPoint(x: Triangle.midXPosition + Triangle.width, y: Triangle.height))
/* */
maskPath.addLine(to: CGPoint(x: bounds.size.width, y: Triangle.height))
maskPath.addLine(to: CGPoint(x: bounds.size.width, y: bounds.size.height))
maskPath.addLine(to: CGPoint(x: 0, y: bounds.size.height))
maskPath.addLine(to: CGPoint(x: 0, y: Triangle.height))

maskPath.close()

maskLayer.path = maskPath.cgPath
layer.mask = maskLayer
}

/// Evaluates the properties set in storyboard. This methods calculates the x-center of the triangle
private func calcTriangleMidXPosition() {
if relativePosition {
Triangle.midXPosition = bounds.size.width / 2 + triangleMidXOffset * bounds.size.width / 2
} else {
Triangle.midXPosition = bounds.size.width / 2 + triangleMidXOffset
}
}

private func addDecoration() {
if let superview = superview {

let topLine = UIView(frame: CGRect(x: 0, y: frame.minY + Triangle.height - 2, width: bounds.size.width, height: 1))
let bottomLine = UIView(frame: CGRect(x: 0, y: frame.minY + Triangle.height - 4, width: bounds.size.width, height: 1))

topLine.backgroundColor = UIColor.white
bottomLine.backgroundColor = UIColor.white

topLine.alpha = 0.5
bottomLine.alpha = 0.2

superview.insertSubview(topLine, belowSubview: self)
superview.insertSubview(bottomLine, belowSubview: self)
}
}

private func addLines() {

guard lines > 0 else {
return
}

let paddingLeft: Int = 20
let lineLength: Int = 25

let linesLayer = CAShapeLayer()
linesLayer.frame = bounds

let padding: CGFloat = 20

let minY = Triangle.height + padding
let maxY = bounds.height - padding
let yArea = maxY - minY



for x in 0...lines {
let path = UIBezierPath()
path.lineWidth = 3.0

path.move(to: CGPoint(x: CGFloat(paddingLeft), y: minY + CGFloat(x) * yArea / CGFloat(lines)))
path.addLine(to: CGPoint(x: CGFloat(paddingLeft) + CGFloat(lineLength), y: minY + CGFloat(x) * yArea / CGFloat(lines)))

UIColor(red: 200.0/255.0, green: 200.0/255.0, blue: 200.0/255.0, alpha: 1.0).setStroke()
path.stroke()
}
}
}

谢谢大家的帮助!

最佳答案

每次出现此“代理崩溃”问题时,都会创建一个崩溃日志。您可以在这里找到所有这些:

~/Library/Logs/DiagnosticReports

命名为 IBDesignablesAgentCocoaTouch_*.crash

只需进入 Finder(转到 -> 转到文件夹),复制路径并替换为您的用户名。

可能你那里有太多崩溃日志,你可以将它们全部删除,清理你的项目,重新构建并检查文件夹。

关于ios - @IBDesignables - "the agent crashed"但应用程序仍然有效(大部分时间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39942159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com