gpt4 book ai didi

ios - 有没有办法在发送本地通知时运行一些代码?

转载 作者:搜寻专家 更新时间:2023-10-30 22:15:09 25 4
gpt4 key购买 nike

我想在我的本地通知发出后运行一些代码来更新 View Controller ,我已经尝试过函数didReceiveLocalNotification,但它只在用户点击通知时才有效,我是想知道是否有一种方法可以在通知发出后运行一个函数?

最佳答案

我认为您无法知道本地通知何时发出,主要是因为您可以安排本地通知或立即发送,以防您的应用程序处于后台。

根据 Apple :

You schedule a local notification by calling scheduleLocalNotification:. The app uses the fire date specified in the UILocalNotification object for the moment of delivery. Alternatively, you can present the notification immediately by calling the presentLocalNotificationNow: method.

Apps might also find local notifications useful when they run in the background and some message, data, or other item arrives that might be of interest to the user. In this case, an app can present the notification immediately using the UIApplication method presentLocalNotificationNow: (iOS gives an app a limited time to run in the background).

没有办法知道 UILocalNotification 是什么时候发送的,但是当它收到时当然是有一些情况的。在你的情况下,我想你正在安排一个 UILocalNotification 所以让我们分成几部分:

  • 当应用未打开且用户触摸它时发送通知

    iOS 应用程序的委托(delegate)实现 application:didFinishLaunchingWithOptions: 方法来处理本地通知。它使用 UIApplicationLaunchOptionsLocalNotificationKey 键从启动选项字典中获取关联的 UILocalNotification 对象。因此,您可以通过触摸 UILocalNotification 知道应用程序在哪里打开。见以下代码:

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    if let launchNotification = launchOptions?[UIApplicationLaunchOptionsLocalNotificationKey] as? UILocalNotification {
    // do anything you want update UIViewController, etc
    }

    return true
    }
  • 当应用程序运行并且用户触摸它时发送通知

    一旦用户触摸了 UILocalNotification,您就可以使用 didReceiveLocalNotification 方法处理它,并在其中执行任何您想做的事情。

  • 当应用正在运行且用户未触摸时发送通知

如果用户不触摸 UILocalNotification,您唯一可以知道是否发送了 UILocalNotification 的方法是保留一个包含 UILocalNotifications 的列表 你之前已经安排好了,稍后再检查(这不是一个很好的解决方案,但它的工作)。

尽管如此,UIApplicationWillEnterForegroundNotification 始终存在,可用于通知您要更新的 UIViewController 应用程序将以这种方式进入前台:

private var foregroundNotification: NSObjectProtocol!

override func viewDidLoad() {
super.viewDidLoad()

foregroundNotification = NSNotificationCenter.defaultCenter().addObserverForName(UIApplicationWillEnterForegroundNotification, object: nil, queue: NSOperationQueue.mainQueue()) {
[unowned self] notification in

print("Notified ViewControllerB")
}
}

deinit {
// make sure to remove the observer when this view controller is dismissed/deallocated

NSNotificationCenter.defaultCenter().removeObserver(foregroundNotification)
}

我认为您必须正确考虑收到通知时您需要在应用程序内部做什么,以防用户不点击它。

希望对你有帮助

关于ios - 有没有办法在发送本地通知时运行一些代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35351381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com