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

时间:2016-02-11 22:31:31

标签: ios swift uilocalnotification

我想在发送本地通知时运行一些代码来更新viewcontroller,我已经尝试了函数didReceiveLocalNotification,但它只在用户点击通知时才有效,我想知道是否有是一种在发送通知时运行功能的方法吗?

3 个答案:

答案 0 :(得分:4)

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

根据Apple

  

您可以致电scheduleLocalNotification:来安排本地通知。该应用程序使用UILocalNotification对象中指定的开火日期作为交付时刻。或者,您可以通过调用presentLocalNotificationNow:方法立即显示通知。

     

应用程序还可能会发现本地通知在后台运行时有用,并且某些消息,数据或其他项目可能会对用户感兴趣。在这种情况下,应用可以使用UIApplication方法presentLocalNotificationNow:立即显示通知(iOS为应用提供了有限的时间在后台运行)。

无法知道UILocalNotification何时被发送,但当它收到时当然是某种情况。在您的情况下,我认为您正在安排UILocalNotification,因此请按部分进行划分:

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

    iOS应用程序的委托实现application:didFinishLaunchingWithOptions:方法来处理本地通知。它使用UILocalNotification密钥从启动选项字典中获取关联的UIApplicationLaunchOptionsLocalNotificationKey对象。因此,您可以通过触摸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)
}

我认为,如果用户没有点击通知,您必须在收到通知后正确思考应用内容。

我希望这对你有所帮助。

答案 1 :(得分:1)

在目标c中有一个方法,你可以搜索类似的swift ..在你的appdelegate中添加这个方法

- (void)userNotificationCenter:(UNUserNotificationCenter *)center
       willPresentNotification:(UNNotification *)notification
         withCompletionHandler:(void (^)(UNNotificationPresentationOptions UNNotificationPresentationOptionBadge))completionHandler{
       [self.tableview reloadData];
}

我认为这会有所帮助..

答案 2 :(得分:-1)

您可以使用发送通知的方法进行更新。