【问题标题】:Check for launching from UILocalNotification in Swift在 Swift 中检查从 UILocalNotification 启动
【发布时间】:2014-07-20 23:53:15
【问题描述】:

这是How to check launchOptions in Swift? 的后续问题 - 我让我的应用成功启动而没有崩溃,但我似乎无法正确检测到应用是从通知启动还是正常启动。

我正在像这样创建我的 UILocalNotification:

// set up a frequently recurring notification here just for testing...
var fast = UILocalNotification()
fast.fireDate = NSDate(timeIntervalSinceNow: 15)
fast.alertBody = "Alert Message"
fast.timeZone = NSTimeZone.localTimeZone()
fast.repeatInterval = NSCalendarUnit.CalendarUnitMinute
fast.userInfo = ["Important":"Data"]
UIApplication.sharedApplication().scheduleLocalNotification(fast)

这是我在从 UILocalNotification 启动应用程序时尝试处理的代码。

func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
    if var launch = launchOptions {
        if var key = launch.objectForKey(UIApplicationLaunchOptionsLocalNotificationKey) {
            // I never seem to reach this point...
        }
    }
    return true
}

如果我的应用程序是后台运行的并且我点击了警告框,我想触发的操作就会正确执行,所以我知道我至少可以让一条路径正常工作。这里的问题是完全从通知中启动应用程序。

【问题讨论】:

    标签: swift uilocalnotification


    【解决方案1】:

    如果您的应用程序在后台运行,“应用程序 didFinishLaunching”方法将不会被调用。它已经启动了。

    在这种情况下,您应该在“应用程序 didReceiveLocalNotification”方法中完成您的工作。

    func application(application: UIApplication!, didReceiveLocalNotification notification: UILocalNotification!) {
            // do your jobs here
    }
    

    【讨论】:

    • 是的,这部分工作正常。但是,我说的是应用程序正在启动的情况——意思是,它没有在后台运行。
    【解决方案2】:

    如果您直接启动应用程序,LaunchOptions 将为零。如果您通过通知启动应用程序而不是直接启动应用程序,则代码将运行。

    如果你直接启动应用程序,那么你需要一些其他的方法来解决这个问题。就像使用LocalNotification 的时间和当前时间一样,决定显示哪个视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多