Приложение NSApplicationDelegate applicationDidFinishLaunching не вызывается

Я пытался поиграть со Swift 3, но не могу начать. Следующий код компилируется, но ничего не регистрирует. Похоже, applicationDidFinishLaunching не вызывается. Я пропустил какую-то важную часть здесь?

Источники/main.swift:

import AppKit

class AppDelegate: NSObject, NSApplicationDelegate {
    func applicationDidFinishLaunching(aNotification: NSNotification) {
        NSLog("application start")
    }
}

NSApplication.shared()
NSApp.setActivationPolicy(.regular)
let controller = AppDelegate()
NSApp.delegate = controller
NSApp.run()

p.s. Есть аналогичный вопрос о том, что applicationDidFinishLaunching вызывается, но ничего не печатает. Я считаю, что это не так, так как наличие window.orderFrontRegardless() вместо ведения журнала также не имеет для меня никакого эффекта.

System Version: OS X 10.11.6

> swift --version
Apple Swift version 3.0 (swiftlang-800.0.43.6 clang-800.0.38)
Target: x86_64-apple-macosx10.9

person Allactaga    schedule 03.09.2016    source источник
comment
Насколько я знаю, NSApplicationDelegate не определяет метод application(_:didFinishLaunchingWithOptions:). Ты не путаешь NSApplicationDelegate.applicationDidFinishLaunching(_:) с UIApplicationDelegate.application(_:didFinishLaunchingWithOptions:)?   -  person OOPer    schedule 04.09.2016
comment
Спасибо, что указали на это. Я внес изменения в вопрос. Эффекты, к сожалению, все те же   -  person Allactaga    schedule 04.09.2016


Ответы (3)


Если вы хотите реализовать протоколы Objective-C в Swift 3, вам нужно использовать _, указывающий, что метод не имеет метки для первого параметра.

func applicationDidFinishLaunching(_ aNotification: Notification) {

(ОБНОВИТЬ)

Извините, в моем первом коде я забыл заменить NSNotification на Notification. (Спасибо, Лео Дабус.)

person OOPer    schedule 04.09.2016
comment
Например: main.swift:229:10: warning: instance method 'applicationDidFinishLaunching' nearly matches optional requirement 'applicationDidFinishLaunching' of protocol 'NSApplicationDelegate' func applicationDidFinishLaunching(_ aNotification: NSNotification) { ^ - person Allactaga; 04.09.2016
comment
Попробуйте удалить NS из NSNotification - person Leo Dabus; 04.09.2016
comment
Это отвечает на вопрос, который я задал, но, что интересно, не решает мою проблему с открытием окна. Я поиграю и, возможно, задам другой вопрос позже. - person Allactaga; 04.09.2016
comment
Честно говоря, я не очень хочу реализовывать протоколы Objective-C. То, что я пытаюсь сделать, это написать минимальное приложение с графическим интерфейсом быстрым способом 3, но в поисках любых документов я либо нахожу статьи, связанные с swift2, либо iOS, которые я не могу найти способ адаптировать - person Allactaga; 04.09.2016

У меня была аналогичная проблема, когда func applicationDidFinishLaunching(_ aNotification: Notification) не звонили.

Для меня проблема заключалась в выходе ссылок App Delegate.

введите здесь описание изображения

Решение. Простое удаление и повторное подключение помогло мне решить проблему.

Вот как вы можете воссоздать соединение

введите здесь описание изображения

person aToz    schedule 02.08.2019

Строка, на которую вы ссылаетесь, но не используете NSApplication.shared, выглядит как опечатка. Если вы замените его на NSApp = NSApplication.shared и убедитесь, что подпись метода в AppDelegate верна, она должна работать.

person R. Rincón    schedule 09.05.2018