SnapKit 中的不稳定错误

Posted

技术标签:

【中文标题】SnapKit 中的不稳定错误【英文标题】:Erratic error in SnapKit 【发布时间】:2017-05-31 20:35:20 【问题描述】:

以下是我的 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相关的代码,该应用程序将正常运行。)

补充资料:

异常发生在 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】:

我找到了几个答案。

    如何搜索 Google 仍然很重要。我改变了我的搜索并在 SO 上找到了this,简短的版本是它说你不能专门对 NSTextView 形成弱引用,并包含一个指向解释性 Clang 文档的链接。

    也许更有趣的是,我还找到了我在标题中提到的“不稳定”错误的答案——我开发的其中一台机器安装了 Swift 3.1,而另一台安装了 3.0.2。较新的版本没有显示形成弱链接的错误,这表明 Apple 已升级 NSTextView 实现。

【讨论】:

以上是关于SnapKit 中的不稳定错误的主要内容,如果未能解决你的问题,请参考以下文章

GCC的std :: sort与lambdas的不稳定行为

iOS7 中 jQuery Mobile 滑动事件的不稳定行为

mime设备内部错误啥意思

ARSessionConfiguration.WorldAlignment = .gravityAndHeading 的不稳定世界原点/对齐

hiveql 中 max,min 的不稳定行为

R中rbinom(prob = 0.5)的不稳定种子行为