#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, поскольку оно не является aUIViewController
. Вам необходимо представить это из aUIViewController
или вашего представления 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. Теперь работает нормально. Большое спасибо.