当应用程序在Swift 2.0后台运行时发送本地通知

我试图在用户最小化应用程序时(通过点击iPhone的主页button或locking手机)发送“推送通知样式”警报。

我的应用程序不断分析一个XML文件(每10秒钟),我希望应用程序继续运行,以便在程序中遇到一些条件时向用户发送本地通知,即使用户已经最小化应用程序或locking了它们电话。

我已经从教程中反弹,每个人似乎都“安排”了一个通知,但是这对我来说不起作用,因为我的通知不是基于时间的,而是基于满足条件的。

到目前为止我所做的是:

AppDelegate.swift

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)) return true } 

MapViewController.swift

 // Some function func someFunction(delta: Int) { if delta < 100 { // Send alert to user if app is open let alertView = UIAlertController(title: "This is an Alert!", message: "", preferredStyle: UIAlertControllerStyle.Alert) alertView.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) self.presentViewController(alertView, animated: true, completion: nil) // Send user a local notification if they have the app running in the bg pushTimer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: Selector("pushNotification"), userInfo: nil, repeats: false) } } // Send user a local notification if they have the app running in the bg func pushNotification() { let notification = UILocalNotification() notification.alertAction = "Go back to App" notification.alertBody = "This is a Notification!" notification.fireDate = NSDate(timeIntervalSinceNow: 1) UIApplication.sharedApplication().scheduleLocalNotification(notification) } 

警报工作很好,而应用程序是开放的,但通知从来没有显示,当我最小化我的手机上的应用程序。 我认为应用程序在后台运行时不运行,或者我不太了解这个概念。 任何帮助是极大的赞赏。

默认情况下,NSTimer只在模拟器中工作。 尝试添加到您的AppDelegate文件:

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [.Sound, .Alert, .Badge], categories: nil)) application.beginBackgroundTaskWithName("showNotification", expirationHandler: nil) return true }