iOS 在 vi​​ewcontroller 启动前添加观察者

标签 ios swift

这是我的 iOS 场景

1.应用收到远程通知

2.在 Appdelegate 的 didFinishLaunchingWithOptions 我发布一个通知

        if let options = launchOptions{
        if let remoteNotification = options[UIApplicationLaunchOptionsKey.remoteNotification]{

             //post notification
        }
    }
  1. 应用的 Root View Controller 是一个导航 Controller ,其根 Controller 是目标 Controller 。
  2. 在目标 Controller 的 viewDidLoad 中,我添加了一个观察者来获取此通知。

问题是发布通知时未创建目标 View Controller 。所以目标 View Controller 根本得不到通知。如何解决?

最佳答案

您可以将您的通知保存为 AppDelegate 中的引用,例如:

var notification : NSNotifcation?

并在您收到通知时设置它的值。然后在您的 View Controller 中检查 AppDelegatenotification 属性是否有值。

if let notification = (UIApplicaton.shared.delegate as! AppDelegate).notification{
  // handle your notification
}

另外不要忘记在完成后将 notification 值设置为 nil

关于iOS 在 vi​​ewcontroller 启动前添加观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40241287/

相关文章:

ios - 编程自动布局不计算 UIScrollView 的高度

ios - 无法使用带有 IDFA 的 Google Analytics iOS SDK 验证人口统计报告的跟踪代码

php - 通过 cURL 获取 "card-title"html 元素并解析/输出响应

ios - 无法在 iOS 13 中禁用暗模式 - 基于 plist 权限文本的设备特定权限警报

swift - RxSwift - 使用 maxCount 重试网络请求,直到成功

ios - Xcode 关闭控制台输出中的自动布局相关警告

objective-c - 在UIPickerView选择数组之前,按字母顺序对数组进行排序

objective-c - 每个 .swift 文件不应该是一个类吗?

objective-c - 将 SpriteKit SKScene 中的 2D 点覆盖SKScene 映射到 SceneKit SCNScene 中的 3D 点

ios - 为什么调用 super 是此方法的最后一件事而不是第一件事?