NSViewController.init(nibName:bundle:)

Переопределение NSViewController.init(nibName...) можно переопределить в пустом проекте, но не в моем большом! Как мой проект может повлиять на это?

  1. НАСТРОЙКА: я добавляю следующее в пустой проект, и он отлично компилируется:

    class FooNsVc : NSViewController 
    override init(nibName nibNameOrNil:NSNib.Name?, bundle nibBundleOrNil:Bundle?) {
        super.init(nibName:nibNameOrNil, bundle:nibBundleOrNil)
        loadView()
    }
    }
    
  2. ОШИБКА: когда я вставляю его в свое приложение, я получаю ошибки компиляции: Initializer does not override a designated initializer from its superclass. ПОЧЕМУ. Я удалил все расширения NSViewController и его суперклассов NSResponder и NSObject. те же симптомы.

  3. ЗАМЕЧАТЕЛЬНО: замена 2-й и 3-й строк на следующие приводит к компиляции.

      init(nibName nibNameOrNil:NSNib.Name?, bundle nibBundleOrNil:Bundle?) {
          super.init(nibName:nibNameOrNil, bundle:nibBundleOrNil)
    
  4. Но ошибки в loadView() с could not load the nibName: is in in bundle (null) AtomInspector.xib есть, он показан в Assets/xib/AtomInspector.xib, скопирован туда из рабочего проекта OBJC.

  5. Я начал взламывать, и через час я сократил 18 000 строк своего приложения до 3 000. Но ошибка ускользнула.

Я сделал это снова, ошибка снова ускользнула.


person Allen King    schedule 24.10.2020    source источник
comment
Как вы создаете экземпляр FooNsVc? Полагается ли FooNsVc на AtomInspector.xib?   -  person bhr    schedule 24.10.2020
comment
На самом деле FooNsVC вообще не создается! Проблема компиляции возникает только при ее определении.   -  person Allen King    schedule 24.10.2020
comment
Кроме того, я просто включил xib в пустой проект и создал экземпляр FooNsVc() (в applicationDidFinishLaunching). Он выполняется без ошибок (хотя я ничего не делаю с получившимся FooNsVc.)   -  person Allen King    schedule 24.10.2020
comment
Первый код, который вы показали, не компилируется, так как в нем отсутствует фигурная скобка. Но если мы поместим эту фигурную скобку, ваш код скомпилируется, если вы также реализуете init(coder:). Так что невозможно воспроизвести проблему на основе того, что вы сказали.   -  person matt    schedule 25.10.2020
comment
Да, { нужен. Спасибо. (Он потерялся при вставке материала в переполнение стека. (Там нет привязок клавиш emacs)) title="как изменить привязку клавиш атома"> stackoverflow.com/questions/43627165/   -  person Allen King    schedule 25.10.2020
comment
Кстати, спасибо тому, кто переформатировал мой код выше. Я должен знать, как это сделать, но не знаю.   -  person Allen King    schedule 25.10.2020
comment
ДА, воспроизвести невозможно. Я попытался сократить свои 18 тысяч строк до фрагмента, но дважды потерпел неудачу. Я искал подсказки о том, как подойти к этому.   -  person Allen King    schedule 25.10.2020
comment
ОБНОВЛЕНИЕ. Заставив FooNsVc использовать .xib, я заметил конфликт имен в своем приложении между Bundle (ресурсы в мире NSBundle) и Bundle (группировка фактов в моем приложении). Когда я отодвигал свой Bundle в сторону, мир NSBundle казался более счастливым (не знаю почему), и я мог загрузить .xib FooNsVc(). После устранения дополнительной путаницы с назначенными инициализаторами для NsVc все начинает работать. Так что эта проблема в основном решена для меня. Спасибо за помощь!   -  person Allen King    schedule 25.10.2020