Ошибочная ошибка в SnapKit

Ниже приведен метод viewDidAppear(), с помощью которого я пытаюсь создать прототип для своего приложения. Переменная экземпляра graphicsView связана через раскадровку с экземпляром подкласса NSView, который я написал, который, в свою очередь, заключен в NSScrollView в NSSplitView. Этот код находится в контроллере представления для этого представления.

    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), В соответствии с инструкциями в файле readme, который я публикую здесь; может кто-то из команды SnapKit пролил свет на ошибку? (Приложение работает нормально, если я удаляю boxкод.)

Добавлена ​​информация:

Исключение происходит в строке 37 ConstraintItem.swift, которая self.target = target, Я установил точку останова прямо перед этой строкой и выполнил e target в отладчике; вот что я получил:

(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 ответ

Я нашел несколько ответов.

  1. Как вы ищете Google остается важным. Я еще немного изменил свои поиски и натолкнулся на это здесь, в SO, краткая версия которого гласит, что в нем сказано, что вы не можете сформировать слабую ссылку конкретно на NSTextView, и содержит ссылку на пояснительную документацию Clang.

  2. Возможно, что еще более интересно, я также нашел ответ на "ошибочные" ошибки, которые я упомянул в названии - одна из машин, на которых я работаю, оказывается, имеет Swift 3.1, а другая - 3.0.2. Более поздняя версия не содержит ошибок, образующих слабое звено, предполагая, что Apple обновила реализацию NSTextView.

Другие вопросы по тегам