以下是我的 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 错误。
据我所见, NSTextView 将被强烈保留box
,所以我不知道错误的来源。错误出现在第一行ConstraintItem.init(target: AnyObject?, attributes: ConstraintAttributes)
。根据我在此处发布的自述文件中的说明;SnapKit 团队中的某个人可能会对该错误有任何额外的了解吗?(如果我删除box
-related 代码,该应用程序将正常运行。)
补充资料:
异常发生在 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
}
}