SnapKit

时间:2017-05-31 20:35:21

标签: swift macos runtime-error macos-sierra snapkit

以下是我的viewDidAppear()方法,我正在尝试为我的应用程序原型化一个功能。 graphicsView实例变量通过故事板绑定到我编写的NSView子类的实例,后者又包含在NSSplitView中的NSScrollView中。此代码位于该视图的视图控制器中。

    override func viewWillAppear() {
        super.viewWillAppear()

        let red = CGColor.init(red: 1, green: 0, blue: 0, alpha: 1)
        self.view.layer?.backgroundColor = red

        let box = NSTextView()
        self.graphicsView.addSubview(box)
        box.snp.makeConstraints { (make) -> Void in
            make.edges.equalTo(self.graphicsView).inset(NSEdgeInsetsMake(100, 100, self.graphicsView.bounds.height - 200, self.graphicsView.bounds.width - 300))
        }
        box.textStorage?.append(NSAttributedString(string: "Hello Sailor"))
        box.alignCenter(self)
    }

执行时,我会在约束的尾随闭包的结束括号上得到错误Cannot form weak reference to instance (0x6000001224e0) of class NSTextView. It is possible that this object was over-released, or is in the process of deallocation.以及通常的EXC_BAD_INSTRUCTION错误。

据我所知,box将强烈保留NSTextView,因此我无法看到错误的来源。该错误显示在ConstraintItem.init(target: AnyObject?, attributes: ConstraintAttributes)的第一行。根据我在这里发布的自述文件中的说明; SnapKit团队中的某个人是否可以对错误进行任何补充? (如果删除与box相关的代码,该应用程序将正常运行。)

添加信息:

异常发生在ConstraintItem.swift的第37行,即self.target = target。我在该行之前设置了一个断点,并在调试器中执行了e目标;这就是我得到的:

(lldb) e target
(AnyObject?) $R1 = (instance_type = 0x0000608000164c80) {
  instance_type = 0x0000608000164c80 {
    AppKit.NSTextView = {
      baseNSText@0 = <extracting data from value failed>

    }
    title = "some random text"
    minimumWidth = 100
  }
}

1 个答案:

答案 0 :(得分:0)

我找到了几个答案。

  1. 您如何搜索Google仍然很重要。我更多地改变了我的搜索,并在此处this来了,其简短的版本是它表示你不能专门针对NSTextView形成一个弱引用,并包含一个解释性Clang文档的链接。 / p>

  2. 也许更有意思的是,我也找到了#34;不稳定&#34;我在标题中提到的错误 - 我开发的其中一台机器竟然有Swift 3.1,但另一台机器有3.0.2。较新版本没有出现构成弱链接的错误,表明Apple已经升级了NSTextView实现。