【问题标题】:'NSInvalidArgumentException' closing'NSInvalidArgumentException' 关闭
【发布时间】:2019-10-03 10:49:00
【问题描述】:

我正在练习创建一个不主要使用情节提要的 UI,当我开始调试时,我的应用程序崩溃了,它给我带来了这个错误。

我试图从 info.plist 和 target 中删除“main”,但它不起作用

2019-10-03 12:43:13.699871+0200 provolone[3580:115566] *** 终止 应用程序由于未捕获的异常“NSInvalidArgumentException”,原因: '不能将自己添加为子视图'

这是 myViewController,Xcode 11.1 GM 种子 (11A1027)

import UIKit
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
          let view = UILabel()

          view.frame = CGRect(x: 0, y: 0, width: 252, height: 60)
          view.backgroundColor = .white
          self.view = view

          view.textColor = UIColor(red: 0.33, green: 0.36, blue: 0.49, alpha: 1)
          view.font = UIFont(name: "OpenSans-Bold", size: 26)
          view.numberOfLines = 0
          view.lineBreakMode = .byWordWrapping
          let paragraphStyle = NSMutableParagraphStyle()
          paragraphStyle.lineSpacing = 0

          // Line height: 30 pt

          view.textAlignment = .center
          view.attributedText = NSMutableAttributedString(string: "Connect with people\nyou love.", attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])

          let parent = self.view!
          parent.addSubview(view)
          view.translatesAutoresizingMaskIntoConstraints = false
          view.heightAnchor.constraint(equalToConstant: 60).isActive = true
          view.centerYAnchor.constraint(equalTo: parent.centerYAnchor, constant: 137).isActive = true
    }
}

【问题讨论】:

  • 您的意思是 Xcode 11 吗?没有 Swift 11.1,最新的是 5.1。提供粘贴您的问题的一些代码也会很有帮助...
  • Xcode 11.1 GM 种子 (11A1027)
  • @PeterPohlmann 请帮帮我
  • 您应该研究“以编程方式创建子视图”的基础知识,然后从那里继续...您可能还想查看“SwiftUI”...。(UIKit 仍然很重要)@ 987654322@

标签: swift xcode uiview uikit


【解决方案1】:

问题似乎出在这一行:

self.view = view

这样,您将刚刚创建的标签分配为您的视图。如果您想将标签添加到您的视图中,只需像这样添加它:

self.view.addSubview(view)

为了便于阅读,我还建议您重命名标签。并且不需要创建父视图来添加您的标签,除非您有一个在这个 sn-p 代码中不清楚的原因。在这些更改之后,您的代码将如下所示:

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        let view = UILabel()

        view.frame = CGRect(x: 0, y: 0, width: 252, height: 60)
        view.backgroundColor = .white

        view.textColor = UIColor(red: 0.33, green: 0.36, blue: 0.49, alpha: 1)
        view.font = UIFont(name: "OpenSans-Bold", size: 26)
        view.numberOfLines = 0
        view.lineBreakMode = .byWordWrapping
        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.lineSpacing = 0

        // Line height: 30 pt

        view.textAlignment = .center
        view.attributedText = NSMutableAttributedString(string: "Connect with people\nyou love.", attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])

        self.view.addSubview(view)

        view.translatesAutoresizingMaskIntoConstraints = false
               view.heightAnchor.constraint(equalToConstant: 60).isActive = true
        view.centerYAnchor.constraint(equalTo: self.view.centerYAnchor, constant: 137).isActive = true
    }
}

【讨论】:

  • 我认为实际错误是由parent.addSubview(view)这一行引起的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-07
相关资源
最近更新 更多