applicationDidFinishLaunching не запускается

#swift #xcode #swiftui

#swift #xcode #свифтуи

Вопрос:

Пытаюсь понять, какую ошибку я делаю со следующим кодом. Это должно быть приложение для Mac, версия Xcode 12.4. Моя проблема в том, что applicationDidFinishLaunching оно никогда не запускается.

 import SwiftUI

@main
struct TestApp: App {
    @NSApplicationDelegateAdaptor(AppDelegate.self) var Delegate
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}


class AppDelegate: NSObject, NSApplicationDelegate {
    func applicationDidFinishLaunching(aNotification: NSNotification) {
        let alert = NSAlert.init()
        alert.messageText = "Hello world"
        alert.informativeText = "Information text"
        alert.addButton(withTitle: "OK")
        alert.addButton(withTitle: "Cancel")
        alert.runModal()
    }
}
 

Комментарии:

1. Прежде всего, вы можете захотеть использовать UIAlertViewController вместо NSAlert . Во-вторых, я не думаю, что вы можете показать оповещение из AppDelegate, поскольку оно не является a UIViewController . Вам необходимо представить это из a UIViewController или вашего представления SwiftUI.

2. @Тодд, спасибо тебе. Код оповещения работал в другом месте, но я полагаю, вы предполагаете, что applicationDidFinishLaunching на самом деле вызывается, но это не самое подходящее место для отправки предупреждения? Дважды проверит это. Спасибо.

3. @Todd этот код предназначен для macOS, а не для iOS.

4. @RajaKishan Спасибо, что указали на это. Я скучал по этому. В этом случае то же самое применяется там, где вы хотите его запустить, NSViewController или в представлении SwiftUI, а не в делегате приложения.

5. @Todd Нет. на Mac нормально запускать alert с помощью alert.runModal() нет необходимости в viewcontroller.

Ответ №1:

У вас ошибка ввода. Это не «a», это «_»

 class AppDelegate: NSObject, NSApplicationDelegate {
    func applicationDidFinishLaunching(_ notification: Notification) { //<here
        let alert = NSAlert.init()
        alert.messageText = "Hello world"
        alert.informativeText = "Information text"
        alert.addButton(withTitle: "OK")
        alert.addButton(withTitle: "Cancel")
        alert.runModal()
    }
}
 

Комментарии:

1. Спасибо. Почти. Мне нужно было заменить a на _, а затем NSNotification на Notification. Теперь работает нормально. Большое спасибо.