Это ошибка фреймворка.Воспроизвести с помощью следующего сбоя легко:
import Cocoa
class Cell: NSCell {
var contents: NSString?
override func copy(with zone: NSZone? = nil) -> Any {
let newObject = super.copy(with: zone) as! Cell
newObject.contents = contents
return newObject
}
}
func crash() {
let cell = Cell()
cell.contents = "hello world"
cell.copy() // crashes while releasing the copied object
}
crash()
Если вместо этого вы используете weak
var, вы получите сообщение об ошибке, которое вы показали.
У меня такое ощущение, чточто-то в copy
реализации NSCell
(и, возможно, NSEvent
и NSImage
), которое не обрабатывает подклассы для типов, имеющих нетривиальные конструкторы.Соответственно, если вы измените let newObject = super.copy(...)
на let newObject = Cell()
, сбой будет предотвращен.Если логика копирования вашего суперкласса достаточно проста, вам, вероятно, следует сделать это сейчас.
Если вы столкнулись с этой проблемой, вам следует подать отчет об ошибке отдельно от моего, но вы, вероятно, можете повторно использовать мой образец.