0

The following is my viewDidAppear() method with which I'm trying to prototype a feature for my app. The graphicsView instance variable is bound via the storyboard to an instance of a subclass of NSView I've written that in turn is enclosed in an NSScrollView within an NSSplitView. This code is within the view controller for that view.

    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)
    }

When executed, I get the error 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. along with the usual EXC_BAD_INSTRUCTION fault on the closing bracket of the trailing closure for the constraints.

As far as I can see, the NSTextView will be strongly retained by box, and so I'm at a loss to see the source of the error. The error shows up at the first line of ConstraintItem.init(target: AnyObject?, attributes: ConstraintAttributes). Per the instructions in the readme I'm posting here; can someone on the SnapKit team perhaps shed any additional light on the error? (The app works normally if I remove the box-related code.)

Added information:

The exception happens at line 37 of ConstraintItem.swift, which is self.target = target. I set a breakpoint right before that line and executed e target in the debugger; here's what I got:

(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
  }
}
Feldur
  • 1,121
  • 9
  • 23

1 Answers1

0

I found several answers.

  1. How you search Google remains important. I varied my searches some more and came upon this here on SO, the short version of which is that it says you can't form a weak reference specifically to NSTextView and includes a link to explanatory Clang documentation.

  2. Perhaps more interestingly, I also found the answer for "erratic" errors I mentioned in the title - one of the machines I develop on turns out to have Swift 3.1, but the other has 3.0.2. The more recent version does not exhibit the error forming the weak link, suggesting Apple has upgraded the NSTextView implementation.

Feldur
  • 1,121
  • 9
  • 23