当您创建一个新项目时,我似乎记得您能够使用方法访问它在故事板self.window中创建的基本空白窗口AppDelegate.
我似乎无法AppDelegate.h通过故事板为文件设置参考出口.我只是产生幻觉或是否无法访问窗口/控制器AppDelegate?
我混淆了iOS和OSX的做法吗?
您好,我正在尝试在我的 IOS 应用中实现推送通知功能。目前,如果应用程序是通过推送通知打开的,我的代码将打开特定的视图控制器。我这样做的方法是将视图控制器推到上面。
我现在需要做的是将一些数据从 appdelegate 传递给 viewcontroller。我知道将数据从视图控制器传递到视图控制器是使用prepareforsegue。我试过这样做,但没有用
我尝试研究如何完成这项任务,但很多关于 stackoverflow 的答案都是过时的 swift 代码,我无法转换为 swift 3。有人可以向我解释我如何将数据从 appdelegate 发送到视图控制器吗?
这是显示didFinishLaunchingWithOptions中的VC的代码
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let destinationViewController = storyboard.instantiateViewController(withIdentifier: "detailPin2") as! detailPinViewController
let navigationController = self.window?.rootViewController as! UINavigationController
navigationController.pushViewController(destinationViewController, animated: false)
Run Code Online (Sandbox Code Playgroud) 我收到错误:
类 AppDelegate 没有初始值设定项
并且似乎无法理解为什么。我正在关注本教程。我是初学者,因此非常感谢任何帮助!
我的代码:
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var centerContainer: MMDrawerController
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
_ = self.window!.rootViewController
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let centerViewController = mainStoryboard.instantiateViewController(withIdentifier: "ViewController") as! ViewController
let leftViewController = mainStoryboard.instantiateViewController(withIdentifier: "LeftSideViewController") as! LeftSideViewController
let leftSideNav = UINavigationController(rootViewController: leftViewController)
let centerNav = UINavigationController(rootViewController: centerViewController)
centerContainer = MMDrawerController(center: centerNav, …Run Code Online (Sandbox Code Playgroud) 在阅读此问题之前,请参阅此视频,以便了解应用中的问题/问题.
我想做的是,
案例1:如果用户未登录应用程序,则打开应用程序登录视图后将打开,在提供用户名和密码后,它将导航到主页.
案例2:如果用户已经登录,那么在启动应用程序后它将成为主页.
我写了代码来存档这个,
在登录页面中,登录按钮的代码
- (IBAction)loginButton:(id)sender {
[self->userdefaults setBool:YES forKey:@"loginSuccess"];
[userdefaults synchronize];
HomeViewController *home=[self.storyboard instantiateViewControllerWithIdentifier:@"homeId"];
[self.navigationController pushViewController:home animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
我正在存储一个值NSUserDefaults,在重新启动或打开应用程序后,在AppDelegate课程中我正在检查NSUserDefaults具有该值的条件,如果是,那么它将显示直接主页,如果没有则它将登录页面.
检查下面的代码,这是在AppDelegate课堂上写的,
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
userdefaults=[NSUserDefaults standardUserDefaults];
mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"loginSuccess"]) {
NSLog(@"Login Done!!!");
HomeViewController *homeVC=[mainStoryboard instantiateViewControllerWithIdentifier:@"homeId"];
SampleNavigationController *navigation = [[SampleNavigationController alloc] initWithRootViewController:homeVC];
// SWRevealViewController * vc= [[SWRevealViewController …Run Code Online (Sandbox Code Playgroud) 我一直在尝试通过使用故事板作为界面设计在 Xcode 11.2 上创建一个新应用程序来学习协调器模式。
我关注了 Paul Hudson 的这个视频,但是当需要将代码添加到 AppDelegate.swift 文件时,我在第 12 分钟卡住了。就像应用程序将启动一样,第一个视图控制器将显示但不会导航。
我应该更改什么,或者更好的是,我应该将当前代码移到哪里以使其工作?
整个项目可以在这里找到。
简而言之,iOS 12 及之前在 AppDelegate 中的代码是这样的:
var coordinator: MainCoordinator?
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let navController = UINavigationController()
coordinator = MainCoordinator(navigationController: navController)
coordinator?.start()
window = UIWindow(frame: UIScreen.main.bounds)
window?.rootViewController = navController
window?.makeKeyAndVisible()
return true
}
Run Code Online (Sandbox Code Playgroud)
我已经看到现在window在 SceneDelegate 中,但是将那里的所有内容移动到 sceneDidConnect 方法并没有帮助。有人可以在这里启发我吗?
谢谢!
我正在我的应用程序中实现 URL 方案,当应用程序位于前台或后台时,它们总体工作正常。但是,我注意到,当它完全关闭并且另一个应用程序尝试使用我的 URL(例如app:page?image=1)访问通常可以工作的内容时,它只会打开该应用程序,但内容永远不会被捕获。
我已经在 AppDelegate 和 SceneDelegate 方法中设置了代码
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:])
Run Code Online (Sandbox Code Playgroud)
和
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
Run Code Online (Sandbox Code Playgroud)
当应用程序处于后台、前台或关闭时它会打开
它仅在前台或后台时打开
当在 iOS 13+ 中使用 SwiftUI 时,确定后台状态的传统方法不再起作用。例如:
AppDelegate 方法applicationDidEnterBackground(_ application: UIApplication)不会applicationDidBecomeActive(_ application: UIApplication)被调用。
不会发送通知didEnterBackgroundNotification、willEnterForegroundNotification和didBecomeActiveNotification。willResignActiveNotification
作为替代方案,有UIWindowSceneDelegate回调:sceneDidBecomeActive(_ scene: UIScene), sceneWillResignActive(_ scene: UIScene), sceneWillEnterForeground(_ scene: UIScene),sceneDidEnterBackground(_ scene: UIScene)
这些替换的问题在于它们特定于进入和离开前台的多个场景之一。它们没有提供一种简单干净的方法来确定整个应用程序是在前台还是后台。
确定应用程序前台/后台状态很重要,其原因与用户界面无关。 当应用程序不在前台时,某些 iOS 功能会默默地失败(通配符蓝牙扫描和 iBeacon 传输是两个例子。)我经常开发没有任何用户界面的 iOS 框架,因此我需要一种方法来确定应用程序后台/前台状态不依赖于在中粘贴一堆样板代码UIWindowSceneDelegate——对我来说,要求某人使用我的框架来做到这一点是不合理的。
是否有任何简单的方法可以使用 SwiftUI 确定 iOS 13 上应用程序的前台/后台状态?
nsnotificationcenter appdelegate ios13 swiftui uiscenedelegate
是否可以在用户关闭最后一个窗口时关闭 macOS SwiftUI 应用程序,类似于applicationShouldTerminateAfterLastWindowClosedAppDelegate 函数。
func applicationShouldTerminateAfterLastWindowClosed(NSApplication) -> Bool
Run Code Online (Sandbox Code Playgroud) 当应用程序运行并收到推送通知时,会调用 didReceive 。
func userNotificationCenter(
_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void
)
Run Code Online (Sandbox Code Playgroud)
因此,当调用上述委托时,我会使用收到的有效负载呈现一个屏幕。这里没有问题。
当应用程序未运行并且用户点击通知时,它应该显示与上面相同的屏幕。它不起作用,因为我没有在 didFinishLaunchingWithOptions 中添加代码。
所以,然后我添加了以下代码 -
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
......
if let userInfo = launchOptions?[UIApplication.LaunchOptionsKey.remoteNotification] as? [AnyHashable: Any] {
......
}
return true
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我无法调试,因为在调试模式下,我必须从后台终止应用程序并点击通知,但在这种情况下,调试器将无法工作。我尝试了替代方法,即显示警报,但警报也不起作用
let aps = remoteNotif["aps"] as? [AnyHashable: Any]
let string = "\n Custom: \(String(describing: aps))"
let string1 = "\n Custom: \(String(describing: remoteNotif))"
DispatchQueue.main.asyncAfter(deadline: .now() + 5) { [weak …Run Code Online (Sandbox Code Playgroud) 我有一堂课:
class AppInfos_M: ObservableObject {
@Published var currentUser: User_M = User_M()
@Published var userTo: User_M = User_M()
}
Run Code Online (Sandbox Code Playgroud)
我声明它main并传递到我的视图environmentObject:
...
@main
struct TestApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
...
@StateObject var appInfos_M = AppInfos_M()
var body: some Scene {
WindowGroup {
LaunchScreen_V()
.environmentObject(appInfos_M)
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
该课程在我的应用程序中运行得非常好。现在我需要从 修改它AppDelegate,因为我需要appInfos_M.userTo.id在收到通知时获取。我尝试了几件事,但没有一个有效。我怎样才能访问它?
在我需要它的所有视图中,我声明这种方式并且它工作正常,但不是在AppDelegate,为什么?:
@EnvironmentObject var appInfos_M: AppInfos_M
Run Code Online (Sandbox Code Playgroud)
这是我尝试过但不起作用的测试之一:
...
class AppDelegate: NSObject, UIApplicationDelegate { ... }
...
@available(iOS 10, *)
extension AppDelegate : …Run Code Online (Sandbox Code Playgroud) appdelegate ×10
ios ×7
swift ×4
swiftui ×3
objective-c ×2
apn ×1
init ×1
ios13 ×1
macos ×1
nswindow ×1
side-menu ×1
sidebar ×1
swift3 ×1
uikit ×1
url-scheme ×1