Ase*_*mov 10 iphone xcode uilocalnotification ios7
问题:
- (void) application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
Run Code Online (Sandbox Code Playgroud)
有时用iOS7不会调用.它不会影响我们如何安排通知:
alarm.fireDate = [[NSDate date] dateByAddingTimeInterval:0.1];
[app scheduleLocalNotification:alarm];
Run Code Online (Sandbox Code Playgroud)
要么:
[app presentLocalNotificationNow:alarm];
Run Code Online (Sandbox Code Playgroud)
我的想法:当用户在通知警报动画完成之前滑动时会发生这种情况.如果他在滑动之前等待半秒钟 - 通知被解雇,应用程序按预期进行.问题可能是应用程序在收到通知之前进入前台.
有没有人见过这个?这是一个错误吗?有解决方案吗 谢谢!
Enr*_*tyo 14
您的应用程序是在后台还是前台?如果它在前台,我很确定该方法被调用.如果不是,也许您没有将该方法放在您的应用程序委托中.
如果是在后台,这里有几种可能的情况:
您的应用已被用户或操作系统杀死.在这种情况下,当用户通过点击通知中心上的通知(或在锁定屏幕中滑动)唤醒您的应用程序时,您的应用程序委托将具有application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions所谓的方法.您可以通过以下方式获取此方法的通知:
[launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
您的应用程序位于后台,用户点击通知中心或锁定屏幕中的通知.在这种情况下,不会调用任何委托方法.文档特别说明didReceiveLocalNotification:了应用程序在前台的时间:
如果应用程序在前台运行,则没有警报,徽章或声音; 相反,如果委托实现它,则调用application:didReceiveLocalNotification:方法.
因此,希望您能够在收到通知时做出明智的决定.我个人觉得当用户通过点击图标(而不是通知)启动应用程序时,我们没有获得通知对象,这有点奇怪.但我现在只是围绕它编写我的逻辑.
Apple在其文档(本地和远程通知编程指南)中明确提到,根据应用程序处于什么状态以及用户采取的操作(如Enrico所述),可以调用不同的方法.
摘要:
所以didReceiveLocalNotification仅在应用程序已经运行且位于前台时触发.您还应该处理未运行的第二个场景,其中apple具有以下代码示例:
Objective-C的:
- (BOOL)application:(UIApplication *)app didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
if (localNotif) {
NSString *itemName = [localNotif.userInfo objectForKey:ToDoItemKey];
[viewController displayItem:itemName]; // custom method
app.applicationIconBadgeNumber = localNotif.applicationIconBadgeNumber-1;
}
[window addSubview:viewController.view];
[window makeKeyAndVisible];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
Swift(由我自己提供的近似值):
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
if let localNotification = launchOptions?[UIApplicationLaunchOptionsLocalNotificationKey] as? UILocalNotification {
if let itemName = localNotification.userInfo?[ToDoItemKey] as? String {
handleNotification(localNotification)
application.applicationIconBadgeNumber = localNotification.applicationIconBadgeNumber - 1
}
}
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6383 次 |
| 最近记录: |