Подклассификация Formatter дает сбой при инициализаторе - PullRequest
0 голосов
/ 13 января 2020

Я пытаюсь создать подкласс класса Formatter для проверки текстовых полей. Приложение аварийно завершает работу при вызове super.init ():

class LengthFormatter: Formatter {
private var maxLength: Int

init(_ maxLength: Int) {
    self.maxLength = maxLength
    super.init() // BAD_ACCESS crash
}

required init? (coder: NSCoder) {
    self.maxLength = 0
    super.init(coder: coder)
}

Я вызываю его следующим образом:

nameTextfield.formatter = LengthFormatter(3)

, где nameTextField - это NSTextField.

Я бы хотел установить максимальную длину при инициализации. Так как в Formatter нет такого инициализатора или поля, как это сделать?

1 Ответ

0 голосов
/ 13 января 2020

Я полагаю, что cra sh происходит из-за исключения абстрактной функции в базе Formatter, которая должна быть переопределена, как показано ниже (протестировано с Xcode 11.2 / macOS 10.15)

class LengthFormatter: Formatter {
    private var maxLength: Int

    init(_ maxLength: Int) {
        self.maxLength = maxLength
        super.init()
    }

    required init? (coder: NSCoder) {
        self.maxLength = 0
        super.init(coder: coder)
    }

    override func string(for obj: Any?) -> String? {  // overriden abstract method
        return obj as? String // < example, returned value might depend on context
    }
}
...